Представьте программу, выводящую все чётные числа от 0 до 12. Можно записать её так:
>console.log(0);
>console.log(2);
>console.log(4);
>console.log(6);
>console.log(8);
>console.log(10);
>console.log(12);
Это работает – но смысл программирования в том, чтобы работать меньше, чем компьютер, а не наоборот. Если б нам понадобились все числа до 1000, это решение было бы неприемлемым. Нам нужна возможность повторения. Этот вид контроля над порядком выполнения называется циклом.
Зацикливание даёт возможность вернуться назад к какой-то инструкции и повторить всё заново с новым состоянием программы. Если скомбинировать это с переменной для подсчёта, можно сделать следующее:
>var number = 0;
>while (number <= 12) {
> console.log(number);
> number = number + 2;
>}
>// → 0
>// → 2
>// … и т.д.
Инструкция, начинающаяся с ключевого слова >while
– это цикл. За >while
следует выражение в скобках, и затем инструкция (тело цикла) – так же, как у >if
. Цикл выполняет инструкцию, пока выражение выдаёт истинный результат.
В цикле нам нужно выводить значение и прибавлять к нему. Если нам нужно выполнять в цикле несколько инструкций, мы заключаем его в фигурные скобки >{ }
. Фигурные скобки для инструкций – как круглые скобки для выражений. Они группируют их и превращают в единое. Последовательность инструкций, заключённая в фигурные скобки, называется блоком.
Много программистов заключают любое тело цикла в скобки. Они делают это для единообразия, и для того, чтобы не нужно было добавлять и убирать скобки, если приходится изменять количество инструкций в цикле. В книге я не буду писать скобки вокруг единичных инструкций в цикле, так как люблю краткость. Вы можете делать, как угодно.
Переменная >number
показывает, как переменная может отслеживать прогресс программы. При каждом повторении цикла >number
увеличивается на 2. Перед каждым повторением оно сравнивается с 12, чтобы понять, сделала ли программа всё, что требовалось.
Для примера более полезной работы мы можем написать программу вычисления 2 в 10 степени. Мы используем две переменные: одну для слежения за результатом, а вторую – для подсчёта количества умножений. Цикл проверяет, достигла ли вторая переменная 10, и затем обновляет обе.
>var result = 1;
>var counter = 0;
>while (counter < 10) {
> result = result * 2;
> counter = counter + 1;
>}
>console.log(result);
>// → 1024
Можно начинать >counter
с 1 и проверять его на ><=10
, но по причинам, которые станут ясны далее, всегда лучше начинать счётчики с 0.
Цикл do похож на цикл >while
. Отличается только в одном: цикл