В ответ на: Почему так? Да как раз потому что код большой и даже очень большой и уследить за всем и вся - нереально. Поэтому, маленький секретик, как вывод из старого, доброго Дейкстры "стурктурное программирование" (или как оно там называлось) - когда пишется конструкция языка, типа if then elsif else, или switch/case, она СРАЗУ(!) пишется целиком, даже если мне надо только then. И если нечего написать в else или switch default, то вот такие тексты туда и втыкаются... "на будущее". При первом же прогоне на тестировании, большинство таких текстов заменяется "правильным" кодом реакции на ошибку в данных... это так, упрощенно и в порядке ликбеза читающим... тут, конечно не мешает правильное понимание чего и когда надо проверять... но это уже из другой оперы...
Дейкстра крут, да.
У этого метода есть развитие, описанное в книге Бейбера "Программное обеспечение без ошибок".
Сейчас трудно внедрять этот метод на производстве, т.к. не всем объяснишь, скажем, как инвариант цикла находится, но Вам, думаю, может пригодиться.