← На главную

Конструкция if-then-else когда-то была изобретением

25.10.2026 16:05 · hackernews

Сегодня if-then-else кажется естественной частью программирования, но эту конструкцию пришлось изобрести. На ENIAC ветвление задавалось физическими проводами. С появлением памяти для программ его заменили условными переходами: если результат вычисления отрицательный, процессор прыгал к другому адресу. В Fortran оператор IF сравнивал число с нулём и предлагал сразу три адреса перехода — мощно, но не слишком понятно.

Flow-Matic, предшественник COBOL, упростила сравнение и ввела otherwise для альтернативного случая. Однако привычной схемы с отдельным блоком else ещё не было.

Большой шаг сделали авторы немецкого предложения для будущего Algol. Они разрешили любое логическое выражение и перестали воспринимать ветвление как безвозвратный скачок. После условного блока программа продолжала работу с общей точки. В другой условной конструкции, case, впервые встретилось слово else. Почему выбрали именно его, неизвестно: документ поспешно переводили с немецкого на английский.

Объединённый Algol 58 сохранил блоковый if, но использовал if either и or if вместо привычного else if. Отдельного else по-прежнему не существовало. На развитие повлияла и работа Джона Маккарти над LISP: условное выражение обязано возвращать значение, поэтому ему нужна финальная ветка otherwise на случай, когда остальные условия ложны.

В конце 1959 года Клаус Самельсон объединил разрозненные идеи. Он убрал if either, оставил обычный if и добавил else для ложной ветки. Так появилась конструкция, зафиксированная затем в Algol 60 и унаследованная большинством современных языков.

Слово нравилось не всем. Кристофер Стрэчи называл else «невежественно неправильным английским», а язык MAD предпочёл otherwise. Но меняли только словарь — сама форма оказалась настолько удачной, что за следующие десятилетия её почти не улучшали.

При этом отчёту Algol 60 всё равно понадобилось полторы страницы и схема со стрелками, чтобы объяснить новую конструкцию. Очевидность if-then-else сформировалась уже у следующих поколений программистов.

Читать оригинал →