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