То, что вы написали, - предварительные условия и важный элемент Проектирование по контракту . Google (или "StackOverflow" :) для этого термина, и вы найдете довольно много хорошей информации о нем, а также некоторую плохую информацию. Обратите внимание, что метод включает также постусловий и концепцию инварианта класса .
Давайте оставим ясно, что утверждения являются действительным механизмом.
Конечно, они обычно ( не всегда ) не проверены в режиме Release, так что это означает, что вы должны проверить свой код перед его выпуском.
Если утверждения оставлены включенными и утверждение нарушено, стандартное поведение в некоторых языках, в которых используются утверждения (и в частности в Eiffel), - генерировать исключение нарушения утверждения.
Утверждения, которые не проверены, являются , а не удобным или желательным механизмом, если вы публикуете библиотеку кодов, или (очевидно) способом проверки прямого, возможно, неверного ввода. Если у вас «возможно неправильный ввод», вы должны разработать как часть нормального поведения вашей программы проверку ввода layer ; но вы все еще можете свободно использовать утверждения во внутренних модулях.
Другие языки, такие как Java, имеют более традиционную явную проверку аргументов и выдачу исключений, если они ошибочны , главным образом потому, что эти языки не имеют строгого "утверждения" или "дизайна договор "традиция.
(Некоторым это может показаться странным, но я нахожу различия в традициях респектабельными и необязательно злыми.)
См. Также этот связанный вопрос .