Шпаргалка по 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. Оно прекращает выполнение цикла и переходит к обработке следующей за циклом кодовой строчке.
Итог.
Циклы – очень нужная и полезная вещь, которая позволяет сократить код в разы. В любой серьезной программе без циклов нельзя обойтись.