До сих пор мы писали код, который выполнялся последовательно, строка за строкой. Но настоящая мощь программирования заключается в способности принимать решения и повторять действия. Именно для этого нам нужны управляющие конструкции: условные операторы (для принятия решений) и циклы (для повторений).
Условные операторы позволяют программе выполнять разные блоки кода в зависимости от того, истинно или ложно определенное условие.
Термин: Условие (Condition) — это выражение, которое может быть оценено как true (истина) или false (ложь). Чаще всего в качестве условий используются операторы сравнения (>, <, ===, !== и т.д.) или булевы переменные.
Конструкция if:
Самая простая форма условного оператора — if. Он выполняет блок кода, только если условие истинно.
javascript
// Пример: Проверка возраста для доступа
let age = 18;
if (age >= 18) {
console.log("Доступ разрешен.");
}
// Если условие (age >= 18) истинно, выполнится console.log.
// Если условие ложно, код внутри фигурных скобок {} будет проигнорирован.
Фигурные скобки {}: Они определяют блок кода, который будет выполнен, если условие истинно. Если внутри блока только одна строка кода, фигурные скобки можно опустить, но для читаемости и безопасности (чтобы случайно не пропустить строку) их лучше всегда использовать.
Конструкция if...else:
Что, если нам нужно выполнить один код, если условие истинно, и другой код, если оно ложно? Здесь на помощь приходит else.
javascript
let temperature = 15;
if (temperature > 25) {
console.log("Жарко! Идем купаться.");
} else {
console.log("Прохладно. Лучше прогуляться.");
}
// Выполнится "Прохладно. Лучше прогуляться."
Конструкция if...else if...else:
А что, если у нас несколько возможных условий? Например, классификация оценок: отличная, хорошая, удовлетворительная, неудовлетворительная. Для таких случаев используется цепочка else if.
javascript
let score = 75; // Оценка студента
if (score >= 90) {
console.log("Отлично!");
} else if (score >= 75) { // Если первое условие ложно, проверяем это
console.log("Хорошо.");
} else if (score >= 50) { // Если и предыдущее ложно, проверяем это
console.log("Удовлетворительно.");
} else { // Если ни одно из вышеперечисленных условий не истинно
console.log("Неудовлетворительно. Нужно подтянуться.");
}
// Выполнится "Хорошо."
Важные моменты:
Условия оцениваются строго по порядку, сверху вниз. Как только находится первое истинное условие, выполняется соответствующий блок кода, и вся цепочка if...else if...else завершается.
Блок else (если он есть) является необязательным и срабатывает только тогда, когда все предыдущие условия ложны.
Пример 4.1.1: Определение времени суток
javascript
let hour = 14; // Текущий час (от 0 до 23)
if (hour >= 6 && hour < 12) {
console.log("Доброе утро!");
} else if (hour >= 12 && hour < 18) {
console.log("Добрый день!");
} else if (hour >= 18 && hour < 22) {
console.log("Добрый вечер!");
} else {
console.log("Доброй ночи!");
}
// Выполнится "Добрый день!"
// Обратите внимание, что здесь мы использовали оператор && (логическое И)
// для объединения двух условий (начало интервала И конец интервала).
Когда нам нужно присвоить переменной одно значение, если условие истинно, и другое, если оно ложно, тернарный оператор (также известный как условный оператор) становится удобной альтернативой if...else.
Синтаксис: условие ? значение_если_истинно : значение_если_ложно
javascript
let age = 20;
let canVote = (age >= 18) ? "Может голосовать" : "Не может голосовать";
console.log(canVote); // Выведет: Может голосовать
let weather = "солнечно";
let message = (weather === "солнечно") ? "Отличная погода!" : "Возьмите зонт.";
console.log(message); // Выведет: Отличная погода!
Тернарный оператор отлично подходит для простых присваиваний, но для более сложной логики лучше использовать if...else.
Когда у вас есть переменная, и вы хотите выполнить разные действия в зависимости от ее конкретного значения (а не диапазона, как в if...else if), оператор switch может быть более читаемым и эффективным.
Термин: switch (переключатель) — конструкция, которая сравнивает значение выражения с несколькими возможными значениями (case) и выполняет соответствующий блок кода.
Синтаксис:
javascript
switch (выражение) {
case значение1:
// Код, если выражение === значение1
break; // Важно! Выход из switch
case значение2:
// Код, если выражение === значение2
break;
// ... другие case ...
default: // Необязательный блок
// Код, если ни один case не совпал
}
case: Обозначает конкретное значение, с которым будет сравниваться выражение.
break: Очень важен! Он выходит из конструкции switch. Если break отсутствует, выполнение кода продолжится до следующего case или до конца switch (это называется “сваливание” — fall-through).
default: Необязательный блок, который выполняется, если ни одно из значений case не совпало с выражением. Похож на else в if...else if.
Пример 4.3.1: Определение дня недели
javascript
let dayNumber = 3; // 0 - воскресенье, 1 - понедельник, ..., 6 - суббота
let dayName;
switch (dayNumber) {
case 0:
dayName = "Воскресенье";
break;
case 1:
dayName = "Понедельник";
break;
case 2:
dayName = "Вторник";
break;
case 3:
dayName = "Среда";
break;
case 4:
dayName = "Четверг";
break;
case 5:
dayName = "Пятница";
break;
case 6:
dayName = "Суббота";
break;
default:
dayName = "Неизвестный день";
}
console.log(dayName); // Выведет: Среда
Пример 4.3.2: switch с отсутствием break (осторожно!)
javascript
let fruit = "яблоко";
let description;
switch (fruit) {
case "яблоко":
description = "Это фрукт.";
// Нет break! Код "свалится" в следующий case.
case "груша":
description += " Оно красное или зеленое."; // Добавится к предыдущему описанию
break; // Здесь break есть.
case "банан":
description = "Это желтый фрукт.";
break;
default:
description = "Неизвестный фрукт.";
}
console.log(description); // Выведет: Это фрукт. Оно красное или зеленое.
// Обратите внимание, как `case "груша"` добавил свою часть к `case "яблоко"`.
Итого: switch хорош для множественных проверок на равенство одного и того же значения. Для диапазонов или более сложных условий лучше использовать if...else if.
Циклы позволяют нам выполнять один и тот же блок кода многократно, пока выполняется определенное условие. Это очень мощный инструмент для автоматизации задач.
Термин: Цикл (Loop) — конструкция, которая позволяет повторно выполнять блок кода.
Термин: Итерация (Iteration) — однократное выполнение блока кода внутри цикла.
А) Цикл for (Идеален, когда мы знаем, сколько раз нужно повторить)
Цикл for имеет три части, разделенные точкой с запятой:
Инициализация: Выполняется один раз перед началом цикла. Обычно здесь объявляется счетчик.
Условие: Проверяется перед каждой итерацией. Если условие истинно, цикл продолжается. Если ложно, цикл завершается.
Инкремент/Декремент (или шаг): Выполняется после каждой итерации. Обычно увеличивает или уменьшает счетчик.
Синтаксис: for (инициализация; условие; шаг) { // блок кода }
Пример 4.4.1: Вывод чисел от 1 до 5
javascript
for (let i = 1; i <= 5; i++) {
console.log(i);
}
// Вывод:
// 1
// 2
// 3
// 4
// 5
Разбор:
let i = 1;: Перед началом цикла объявлена переменная i и ей присвоено значение 1 (инициализация).
i <= 5;: Перед каждой итерацией проверяется: i меньше или равно 5?i = 1: 1 <= 5 (истина) -> выполняем блок кода, затем i++.
i = 2: 2 <= 5 (истина) -> выполняем блок кода, затем i++.
…
i = 5: 5 <= 5 (истина) -> выполняем блок кода, затем i++.
i = 6: 6 <= 5 (ложь) -> цикл завершается.
i++: После каждой итерации значение i увеличивается на 1.
Пример 4.4.2: Вывод таблицы умножения на 7
javascript
console.log("Таблица умножения на 7:");
for (let multiplier = 1; multiplier <= 10; multiplier++) {
let result = 7 * multiplier;
console.log(`7 * ${multiplier} = ${result}`);
}
// Вывод:
// Таблица умножения на 7:
// 7 * 1 = 7
// 7 * 2 = 14
// ...
// 7 * 10 = 70
Б) Цикл while (Идеален, когда мы не знаем точное количество повторений, но знаем условие продолжения)
Цикл while выполняет блок кода, пока условие истинно. Условие проверяется перед каждой итерацией.
Синтаксис: while (условие) { // блок кода }
Пример 4.4.3: Снижение баланса до нуля
javascript
let balance = 100;
let transactionAmount = 10;
let transactionsCount = 0;
while (balance > 0) {
balance = balance - transactionAmount; // Уменьшаем баланс
transactionsCount++; // Увеличиваем счетчик транзакций
console.log(`Баланс после транзакции ${transactionsCount}: ${balance}`);
}
console.log(`Всего транзакций: ${transactionsCount}`);
// Вывод:
// Баланс после транзакции 1: 90
// Баланс после транзакции 2: 80
// ...
// Баланс после транзакции 10: 0
// Всего транзакций: 10
Важно: В цикле while вы должны самостоятельно позаботиться о том, чтобы условие в конечном итоге стало ложным. Если условие всегда будет истинным, вы получите бесконечный цикл, который “заморозит” вашу программу.
В) Цикл do...while (Похож на while, но выполняется хотя бы один раз)
Цикл do...while выполняет блок кода один раз, а затем проверяет условие. Если условие истинно, цикл повторяется.
Синтаксис: do { // блок кода } while (условие);
Пример 4.4.4: Гарантированное выполнение хотя бы раз
О проекте
О подписке
Другие проекты
