В программах, как и в жизни, от принятого решения зависит, какие действия мы выполним следующими. Если на вопрос: “есть лишние деньги?” ответ будет “да”, то купим шоколадку (ну или что-то покрепче), иначе не купим.  Здесь мы стоим перед выбором, то есть у нас накладывается условие.

Конструкция if

При использовании только условного оператора if() {}  нет альтернативы. Действие либо выполняется, либо нет. То есть действие либо выполняется, либо нет.

var exam = “сдам”;
if (exam == “сдам”){
    console.log(“Буду получать стипендию.”);
}

То есть, если я сдам экзамен, то буду получать стипендию. Другой случай просто неопределен.

 

Конструкция if-else

Но в жизни конечно так не бывает. Потому что если не сдать экзамен, будут последствия, отчисление из института например 🙂 и невыплата стипендии наименьшее из зол 🙂
Поэтому чтобы запрограммировать это действие, в JS существует инструкция if или if-else

Инструкция if(…) выполняет условие в скобках и, если результат true, то  вычисляется  блок кода в фигурных скобках {}, следующих сразу за if.  Если же условие вернуло false, то выполнится блок кода после else{}.  
Например:

var exam = “сдам”;
if (exam == “сдам”){
    console.log(“Буду получать стипендию.”);
} 
else {
    console.log(“Ой-ой-ой, отчислят из универа. И НЕ будут платить стипендию”);
}

 

Конструкция if-else if

Но бывают сложные условия. Например

Например:

var exam = “сдам, но на 3”;
if (exam == “сдам”){
    console.log(“Буду получать стипендию.”);
} 
else if (exam == “сдам, но на 3”) {
    console.log(“НЕ будут платить стипендию”);
} else 
{
    console.log(“Ой-ой-ой, отчислят из универа. И НЕ будут платить стипендию”);
}

 

Конструкция ?

Иногда условие if-else можно заменить тренарным оператором знак ?

Синтаксис: 

let  result = = условие ? (если да, то) значение1 : (иначе) значение2;

 

К примеру:

let excellentMark = mark > 5 ? true : false;

 

Конструкция switch

Как мы знаем, в жизни редко бывает только одно условие. Чаще всего условий множество. И чтобы не писать трехэтажные конструкции if-else if-else if else … существует объединяющая ее специальная конструкция switch-case. 

Синтаксис такой:

switch(x) {
  case 'condition1':  // if (x === 'condition1')
    ...
    [break]

  case condition2':  // if (x === 'condition2')
    ...
    [break]

  default:
    ...
    [break]
}

  • Условие х проверяется на строгое равенство первому значению condition1. Если условие 1 выполнилось, то выполняются операции из ветви case  condition1 до ключевого слова break или до конца switch.
  • Если условие 1 не выполнилось, переходим к проверке х на строгое равенство условию condition2 итд.
  • Если ни одно условие не выполнилось, то исполняется вариант в ветви default.

 

Пример работы. 

let discount = 25;

switch (discount) {
   case 10:
   console.log(“Hmm, quite small discount”);
   break;

case 15:
   console.log(“Still, small discount”);
   break;

case 25:
   console.log(“Wow, awesome!”);
   break;

default:
   console.log(“Нету скидки.”);
}

 

Будет выведено: Wow, awesome!

Случай без break

let discount = 25;
switch (discount) {
   case 10:
   console.log(“Hmm, quite small discount”);

case 15:
   console.log(“Still, small discount”);

case 25:
   console.log(“Wow, awesome!”);

default:
   console.log(“Нету скидки.”);
}

 

Будет выведено: Wow, awesome!  Нету скидки.

Согласитесь бред. Не очень логично. Хотя синтаксически верно. 

Еще есть вариант, когда несколько условий пишут в одном case

let discount = 25;
switch (discount) {
case 10:
   console.log(“Hmm, quite small discount”);
   break;

case 15:
case 25:
   console.log(“Wow, awesome!”);
   break;

default:
   console.log(“Нету скидки.”);
}

 

Циклы:

При написании программ часто встает задача выполнить однотипную команду или группу команд много-много раз. К примеру, посчитать сумму всех чисел в массиве из 100 элементов или вывести в столбец ФИО всех сотрудников из таблицы staff.  Мы могли бы конечно считать сумму или выводить список построчно. Например:

var arr[0,1,2,3, … ,99]; 
var sum = arr[0] + arr[1] + arr[2] + … + arr[99]; 

или 

let staff = {
   coworker1: ‘John Smith’,
   coworker2: ‘Samuel L’Jackson’,
   coworker3: ‘Neo’
};

document.write(staff.coworker1 + '<br>');
document.write(staff.coworker2 + '<br>');
document.write(staff.coworker3 + '<br>');

Но, согласитесь, это как-то странно и неэкономно. Поэтому, для сокращения и ясности кода существует такая конструкция как циклы. Циклы нужны для обхода и выполнения однотипных команд в одном месте программы.  

 

Цикл for()

Вспомним, как с английского переводится слово for: для, в течение, за.

Самый популярный и самый сложный из всех циклов. Вот так вот, сразу сложное, скажете вы. Но я думаю, синтаксис вполне понятен и говорит сам за себя:

for (начало; условие; шаг) {
   // ... тело цикла ...
}

Что значит каждый из этих элементов: начало, условие, шаг? Разберем на примере. 

for (let i = 0; i<5; i++) {
   console.log(“текущий шаг цикла” +i);
}

начало — это стартовое значение, с которого начинается счетчик цикла. Для цикла for характерной особенностью как раз и является этот счетчик. В других циклах, как вы увидите далее, нет счетчика, но должно быть условие выхода из цикла, которое программист должен придумать и отслеживать изменение его истинности сам. А, вы понимаете, людям свойственно забывать часто что-либо. Я сама немало раз, при использовании цикла while, где условие выхода из цикла должно изменяться и проверятся внутри тела цикла, забывала менять его. И у меня получался вечный цикл 🙂 То есть цикл, условие выхода из которого никогда не станет ложным, и программа будет выполнять код вечно.

условие — это то ограничение, в результате достижения которого, мы выйдем из цикла. Как в примере выше, если i станет равной 5, мы покинем цикл. 

шаг — это насколько быстро будет изменяться счетчик цикла. Самым распространенным значением является 1. Но может быть и 2.

Например. Вывести все нечетные числа из массива.

let arr[1,2,3,4,5,6,7,8,9,10];

for (let i = 0; i<10; i +=2) {
   console.log(“Четное число” +arr[i]);
}

 

начало

i = 0

выполняется один раз в самом начале, перед входом в цикл

условие

i<10

проверяется перед каждой итерацией (Одно выполнение тела цикла по-научному называется итерация) цикла. Условие может принимать только булево значение. Цикл выполняется, то есть итерации будут повторятся снова и снова пока условие возвращает true. Если результат вычисления равен false, новая итерация цикла даже не будет запускаться.

шаг 

i += 2  или   i = i+1

выполняется после тела цикла на каждой итерации перед проверкой условия.

тело цикла

console.log(“Четное число” +arr[i]);

тело цикла, или новая итерация, будет повторятся снова и снова до тех пор,  пока условие возвращает true



Цикл for-in()

Это вариант цикла for но для работы с объектами или структурами. Чаще всего объект или структура представляет собой конструкцию типа <ключ>:<значение>. Например:

let  struct = {
   carModel1: ‘ford’,
   carModel2: ‘mazda’,
   carModel3: ‘opel’,
   carModel4: ‘toyota’
};

или

let obj = {
   userName: ‘Ivan Severin’,
   profession: ‘developer’,
   country: ‘Russia’,
   age: 35,
   isMarried: true
};

 

И нам нужно как-то обработать эти пары имя-значение. Вот для таких пар ключ-значение и существует цикл for-in

for (var key in obj) {
   console.log(key + ' - это ' + obj[key] + '.');
}

Здесь, в результате выполнения кода, мы выведем в консоль все значения с именами для объекта obj. 



Цикл while

Вспомним, как с английского переводится слово while: пока.

Цикл while имеет следующий синтаксис:

while (condition) {
   // код  "тело цикла"
}

 

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

Рассмотрим работу цикла while на примере:

let i = 0;
while (i < 5) { 
   console.log(“i*i = ” + (i*i) “ ”);
   i++;
}

Здесь мы в цикле выводим перемноженное значение счетчика i в консоль. Затем увеличиваем счетчик на единицу. И начинаем цикл сначала. Проверяем условие на истинность. Если условие истинно, то входим в цикл и выполняем операции последовательно. Итд.

 

Цикл do…. while

Вспомним, как с английского переводится слово do… while: делать … (до тех пор) пока.

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

Вот синтаксис:

do {
   // тело цикла
} while (condition);

Цикл сначала выполнит тело, а затем проверит условие condition, и пока его значение равно true, он будет выполняться снова и снова.

Например:

let i = 0;
do { 
   console.log(“i*i = ” + (i*i) “ ”);
   i++;
} while (i < 5)