Выразительный JavaScript (Хавербеке) - страница 17


Циклы while и do

Представьте программу, выводящую все чётные числа от 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. Отличается только в одном: цикл