Шпаргалка по JavaScript №11 - Циклы

Циклы – очень важная составляющая любого языка программирования. Благодаря им возможно создавать очень короткий код, который будет работать бесконечно долго. В этой части шпаргалок будут рассмотрены все виды циклов, которые присутствуют в языке программирования JavaScript.

Цикл FOR.

Данный вид цикла использует некоторую переменную, значение которой изменяется по определенному закону при каждой итерации (прохождения тела цикла целиком). Пример:

for (var i=0; (i<5); i++) {
    document.writeln('I is equal to '+i+'<br>');
}
// Будет напечатано: I is equal to 0
// Будет напечатано: I is equal to 1
// Будет напечатано: I is equal to 2
// Будет напечатано: I is equal to 3
// Будет напечатано: I is equal to 4

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

Array.prototype.shuffle = function (){
    for(var rnd, tmp, i=this.length; i; rnd=parseInt(Math.random()*i), tmp=this[--i], this[i]=this[rnd], this[rnd]=tmp);
};

Цикл FOR/IN.

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

var myObject = { 'animal' : 'dog',
                 'growls' : true,
                 'hasFleas': true,
                 'loyal' : true }

Теперь мы можем работать с ним следующим образом, абсолютно не беспокоясь о количестве элементов внутри объекта. Словестно такой вид цикла можно описать как “выполнять для каждого элемента из ...”:

for (var property in myObject) {
    document.writeln(property + ' contains ' + myObject[property]+'<br>');
}
// Будет напечатано: animal contains dog
// Будет напечатано: growls contains true
// Будет напечатано: hasFleas contains true
// Будет напечатано: loyal contains true

Цикл WHILE.

Цикл, который будет выполняться неопределенное заранее число раз. Его название так и переводится с английского, как “пока ...”. Пример:

var x = 1;
while (x<5) {
    x = x +1;
}
var x = 1;
while (true) {
    x = x + 1;
    if (x>=5) {
        break;
    }
}

О некоторых пока неизвестных ключевых словах, использованных в примере выше, будет описано в конце данной шпаргалки.

Существует модификация цикла WHILE, когда условие выполнения цикла определно в конце. Таким образом интерпретатор обязательно выполнит тело цикла хотя бы один раз:

var x=1;
do {
    x = x + 1;
} while (x < 5);

Управление циклом.

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

Первое слово: CONTINUE. Когда интерпретатор дойдет до этого слова, то немедленно перейдет к началу цикла и начнет выполнять его заново, но уже для следующей итерации. Это ключевое слово используют, когда нет необходимости выполнять код для данных, которые используются в цикле на данной итерации. Например, программа, которая считает квадрат каждого значения массива. Значения массива определены случайным образом. Пусть они будут всегда неотрицательными. При такой постановке задачи у нас нет необходимости возводить в квадрат единицу и ноль, поэтому в самом начале цикла имеет смысл поставить оператор IF, который будет проверять, является ли очередное значение массива 1 или 0 и, если да, то переходить к следующему значению и не выполнять ненужные вычисления.

Второе слово: BREAK. Оно прекращает выполнение цикла и переходит к обработке следующей за циклом кодовой строчке.

Итог.

Циклы – очень нужная и полезная вещь, которая позволяет сократить код в разы. В любой серьезной программе без циклов нельзя обойтись.

2189