Как не запутаться в условных переходах

298 прочитали

Ни одна программа, которая чуть сложнее, чем Hello World, не обходится без условных операторов типа if…else. И когда их достаточно много, да ещё они вложены друг в друга, то можно легко в них заблудиться и допустить труднонаходимую ошибку, которую не увидит компилятор (интерпретатор).

Приведу один из примеров. Пример будет на JavaScript, но он точно также подходит и для С/С++ и других подобных языков, ну а по сути вообще не привязан к языку.

Ни одна программа, которая чуть сложнее, чем Hello World, не обходится без условных операторов типа if…else.

Этот пример будет работать не так, как, возможно, ожидал программист. Дело в том, что сбивают с толку отступы - создаётся ощущение, что else относится к первому if, хотя на самом деле оно относится ко второму (вложенному). То есть отступы выставлены неправильно. Правильно было бы так:

Ни одна программа, которая чуть сложнее, чем Hello World, не обходится без условных операторов типа if…else.-2

Хотя синтаксически первый вариант тоже правильный. Второй вариант будет более правильный с точки зрения логики, и программа становится более понятной. Правда, при этом она незаметно потеряла первоначальный смысл - вывод сообщения, если х не равен 2, по-прежнему не работает. Ну а чтобы этот утраченный смысл вернуть, надо сделать так:

Ни одна программа, которая чуть сложнее, чем Hello World, не обходится без условных операторов типа if…else.-3

Правило JavaScript (и большинства других языков программирования): конструкция else является частью ближайшей к ней инструкции if. Именно поэтому наша первая попытка провалилась. И чтобы избежать таких провалов в будущем, лучше всегда использовать фигурные скобки в подобных случаях, даже если в блоке if всего одна инструкция и фигурные скобки необязательны. Однако набор двух “лишних” символов (фигурных скобок), отнимет у вас совсем немного времени, но зато сделает код более понятным и позволит избежать труднонаходимых ошибок.

Вообще многие программисты перестраховываются и ставят фигурные скобки ВСЕГДА. В итоге получается что-то типа этого:

Ни одна программа, которая чуть сложнее, чем Hello World, не обходится без условных операторов типа if…else.-4

Да, код при этом становится более громоздким, но зато это максимально снижает вероятность ошибок. Здесь, конечно, каждый выбирает свой путь. Я стремлюсь к золотой середине: если конструкция достаточно простая, то фигурные скобки не использую, если есть хоть какое-то сомнение, то использую.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.