Циклы

Предпосылки: вывод (if/else, логические выражения, puts/gets).

вывод | Функции

Один if несложно написать вручную. Сто одинаковых проверок уже неудобно читать и поддерживать. Компьютер хорошо повторяет одно и то же действие, но для этого в программе нужен способ сказать: что именно повторять и когда остановиться.

while: повторяй, пока условие истинно

Самый простой цикл — while:

count = 1
 
while count <= 5
  puts count
  count = count + 1
end

Программа выведет числа от 1 до 5. На каждом шаге count увеличивается на 1. Когда count становится равным 6, условие count <= 5 перестаёт выполняться, и цикл останавливается.

У любого цикла есть три части:

  • начальное состояние — count = 1
  • условие продолжения — count <= 5
  • изменение состояния — count = count + 1

Если забыть третью часть, условие может никогда не измениться. Тогда программа зациклится.

Сумма нескольких шагов

Цикл полезен не только для печати. Он позволяет накапливать результат:

sum = 0
number = 1
 
while number <= 5
  sum = sum + number
  number = number + 1
end
 
puts sum    # 15

Здесь цикл делает одно и то же действие пять раз: прибавляет очередное число к общей сумме. Без цикла пришлось бы писать пять почти одинаковых строк вручную.

Императивный подход

Ассемблер, условия и циклы строятся по одному принципу: программа идёт шаг за шагом и меняет состояние по ходу выполнения. Такой стиль называют императивным (от лат. 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.

вывод | Функции