Один if несложно написать вручную. Сто одинаковых проверок уже неудобно читать и поддерживать. Компьютер хорошо повторяет одно и то же действие, но для этого в программе нужен способ сказать: что именно повторять и когда остановиться.
Программа выведет числа от 1 до 5. На каждом шаге count увеличивается на 1. Когда count становится равным 6, условие count <= 5 перестаёт выполняться, и цикл останавливается.
У любого цикла есть три части:
начальное состояние — count = 1
условие продолжения — count <= 5
изменение состояния — count = count + 1
Если забыть третью часть, условие может никогда не измениться. Тогда программа зациклится.
Сумма нескольких шагов
Цикл полезен не только для печати. Он позволяет накапливать результат:
sum = 0number = 1while number <= 5 sum = sum + number number = number + 1endputs sum # 15
Здесь цикл делает одно и то же действие пять раз: прибавляет очередное число к общей сумме. Без цикла пришлось бы писать пять почти одинаковых строк вручную.
Историческая справка: goto и структурное программирование
Повторение существовало и до while. В ранних языках для него часто использовали goto — безусловный переход к другой строке:
10 LET COUNT = 120 PRINT COUNT30 LET COUNT = COUNT + 140 IF COUNT <= 5 GOTO 2050 END
Такой код работает, но человеку труднее быстро увидеть его форму: где начало повторения, где условие остановки, куда именно идёт переход. В маленьком фрагменте это терпимо. В большом файле с десятками переходов чтение становится медленнее, потому что нужно постоянно восстанавливать маршрут выполнения.
Именно поэтому появились структурные конструкции вроде while: они оставляют ту же логику, но показывают её форму более явно.
Императивный подход
Ассемблер, условия и циклы строятся по одному принципу: программа идёт шаг за шагом и меняет состояние по ходу выполнения. Такой стиль называют императивным (от лат. imperare — «приказывать»: программа как последовательность команд процессору) программированием.
Это не отдельный язык и не отдельная технология. Это способ описывать решение через последовательность команд: сначала сделать одно, потом другое, потом повторять, пока условие истинно.
Следующая проблема появляется довольно быстро: один и тот же расчёт начинают копировать в разные места. Повторение сняло нагрузку с однотипных шагов, но ещё не помогло с повторением целых кусков логики. Для этого нужны функции.
Sources
Dijkstra, E., 1968, Go To Statement Considered Harmful. Communications of the ACM.
Thomas, D. et al., 2023, Programming Ruby 3.3. Pragmatic Bookshelf.