Перейти к содержимому
Тема 5 из 16
Теория

Условия

Зачем это нужно

Программа должна уметь выбирать: показать кнопку «Войти» или «Выйти», пустить в игру или сказать «мало лет», дать скидку или нет. Для этого есть условия — код, который выполняется, только если что-то верно.

Как устроены задачи с функциями

С этой темы задачи выглядят так: в редакторе уже есть «заготовка» — функция:

function sign(n) {

}

Функция — это именованный кусок кода. Данные приходят в неё через параметр (здесь n), а результат она отдаёт словом return. Проверка сама вызовет функцию с разными числами, например sign(5) и sign(-2), и сравнит, что она вернула. Твоя задача — написать код внутри фигурных скобок. Подробно функции разберём в теме 7, пока достаточно этого.

function double(n) {
  return n * 2;
}
console.log(double(4));

Вывод:

8

if — «если»

const temperature = 30;
if (temperature > 25) {
  console.log("Жарко! Возьми воду.");
}
console.log("Хорошего дня");

Вывод:

Жарко! Возьми воду.
Хорошего дня

В круглых скобках — условие. Если оно true, выполняется блок в фигурных скобках. Если false — блок пропускается, и программа идёт дальше.

else — «иначе» и else if — «иначе если»

const score = 72;
if (score >= 90) {
  console.log("Отлично");
} else if (score >= 70) {
  console.log("Хорошо");
} else if (score >= 50) {
  console.log("Удовлетворительно");
} else {
  console.log("Нужно подтянуть");
}

Вывод:

Хорошо

Условия проверяются сверху вниз, и выполняется только первая подошедшая ветка. Хотя 72 >= 50 тоже верно, до этой проверки дело не дойдёт. Поэтому порядок важен.

return прерывает функцию

Внутри функции return сразу отдаёт результат и выходит из неё. Поэтому else после return можно не писать:

function canVote(age) {
  if (age >= 18) return "да";
  return "нет";
}
console.log(canVote(20), canVote(15));

Вывод:

да нет

Если в блоке одна команда, фигурные скобки можно опустить, как здесь. Но когда команд несколько, скобки обязательны.

Логические операторы

Оператор Смысл Пример
&& И — оба условия верны age >= 18 && hasTicket
|| ИЛИ — хотя бы одно верно isAdmin || isOwner
! НЕ — переворачивает !isLoggedIn
const age = 20;
const hasTicket = true;
console.log(age >= 18 && hasTicket); // true
console.log(age < 12 || age > 65);   // false
console.log(!hasTicket);             // false

Можно группировать скобками: (a && b) || c.

Тернарный оператор ? :

Короткая запись «если-иначе», которая возвращает значение:

const age = 16;
const status = age >= 18 ? "взрослый" : "подросток";
console.log(status);

Вывод:

подросток

Читается так: «условие ? значение-если-да : значение-если-нет». Удобен для простого выбора из двух вариантов; для сложной логики лучше if.

Значение по умолчанию: ?? и ||

const nickname = null;
console.log(nickname ?? "Гость"); // Гость

a ?? b вернёт b, только если a — null или undefined. А a || b вернёт b для любого ложного a, включая 0 и "". Поэтому для чисел безопаснее ??: 0 ?? 10 → 0, а 0 || 10 → 10.

switch — выбор по значению

const day = "sat";
switch (day) {
  case "sat":
  case "sun":
    console.log("Выходной");
    break;
  case "mon":
    console.log("Понедельник — день тяжёлый");
    break;
  default:
    console.log("Будний день");
}

Вывод:

Выходной

switch сравнивает значение строго (===) с каждым case. break обязателен — без него выполнение «провалится» в следующий case. default срабатывает, если ничего не подошло.

Как это работает внутри

Условие в if не обязано быть true/false — JavaScript сам превратит его в логическое значение по правилу «ложных» значений: 0, "", null, undefined, NaN — ложь, остальное — истина. Поэтому if (name) означает «если имя не пустое». А && и || вычисляются лениво: если по первой части ответ уже ясен (false && … или true || …), вторая часть даже не выполняется.

Частые ошибки

  1. = вместо ===. if (x = 5) присваивает 5 и всегда истинно. Пиши if (x === 5).
  2. Неправильный порядок else if. Если сначала проверить score >= 50, оценка «Отлично» никогда не выдастся. Начинай с самых строгих условий.
  3. Двойное сравнение как в математике. 7 <= age <= 17 в JS работает неправильно. Нужно age >= 7 && age <= 17.
  4. Забыли return. Функция без return возвращает undefined — проверка покажет, что получено undefined.
  5. Забыли break в switch. Выполнятся несколько веток подряд.

Шпаргалка

Что Как
Если if (условие) { … }
Иначе если / иначе else if (…) { … } else { … }
И / ИЛИ / НЕ &&, ||, !
Тернарный усл ? да : нет
По умолчанию x ?? "запасное"
Выбор по значению switch (x) { case …: …; break; default: … }
Вернуть из функции return значение;

Знак числа

Лёгкая+10 XP

Допиши функцию sign(n): она должна возвращать строку

  • "positive", если n больше нуля;
  • "negative", если меньше нуля;
  • "zero", если n равно нулю.
sign(5)   → "positive"
sign(-2)  → "negative"
sign(0)   → "zero"

Подключи коннектор, чтобы решать задачи

Код задач выполняется на твоём компьютере — так быстрее и надёжнее, чем в браузере. Для этого нужна бесплатная программа-коннектор CodeWithMe. Подключить её нужно один раз.

Ищем коннектор на этом компьютере…

  1. 1
    Скачай коннектор для своей системы (Windows, macOS или Linux).Скачать коннекторНа странице загрузки выбери файл со своей системой в названии, например windows-amd64.
  2. 2Запусти его и выбери папку, где будут лежать твои решения. Python и Node.js он поставит туда сам, когда понадобится.
  3. 3
    Введи ниже код из 6 цифр — он написан в окне коннектора («Код для сайта CodeWithMe»). Если браузер спросит про доступ к локальной сети — разреши.

Коннектор открытый (исходный код на GitHub), работает только на твоём компьютере и выполняет код лишь после ввода кода сопряжения.