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