Вложенные if: Матрёшка

Вспомни матрёшку: большая кукла, открыл — внутри средняя кукла, открыл её — внутри маленькая.

В коде то же самое: if внутри if — это вложенные условия.

Что такое вложенное if

Представь сценарий:

  • Сначала проверяем: "На улице хороший день?"
  • Если да, то проверяем: "Днём свободно?"
    • Если да → идём гулять
    • Если нет → сидим дома
cpp
if (хороший_день) {
  if (свободен) {
    гуляем()
  }
}

Видишь? Второй if находится внутри первого.

code шаг 1 из 6

nice_weather = true (день хороший), но free_today = false (нет времени).

Заметь: второй if выполнился внутри первого.

Оба условия правда

Теперь и день хороший, и время есть. Что изменится?

code шаг 1 из 5

nice_weather = true И free_today = true.

Видишь? Оба условия true, поэтому мы прошли сквозь обе проверки.

Первое условие ложь

А если день плохой (nice_weather = false)?

code шаг 1 из 4

nice_weather = false. День не подходит для прогулки.

Важно: второй if не выполнился, потому что первый был false!

Проверь

Что выведется?

bool is_student = true;
bool has_discount = false;

if (is_student) {
  if (has_discount) {
    cout << "Super cheap";
  } else {
    cout << "Regular price";
  }
} else {
  cout << "Full price";
}

Ещё:

Что выведется?

bool raining = true;
bool have_umbrella = true;

if (raining) {
  if (have_umbrella) {
    cout << "Go outside";
  } else {
    cout << "Stay home";
  }
} else {
  cout << "No rain";
}

Реальный пример: вход в кино

Хочешь в кино:

  1. Сначала проверяем: есть ли кинотеатр поблизости?
    • Если да, то: есть ли свободные места?
      • Если да → покупаем билет
      • Если нет → едем в другой кинотеатр
    • Если нет → остаемся дома
code шаг 1 из 4

cinema_nearby = true, seats_available = true.

Три уровня: матрёшка из трёх

Можно вложить даже три условия! Но не переусложняй.

cpp
if (работаешь) {
  cout << "Working..." << endl;
  
  if (есть_задача) {
    cout << "Task found!" << endl;
    
    if (может_решить) {
      cout << "Solving!";
    } else {
      cout << "Asking for help";
    }
  } else {
    cout << "No tasks today";
  }
} else {
  cout << "Relaxing...";
}

Разбор:

  • Первый if: работаешь?
  • Второй if (внутри первого): есть задача?
  • Третий if (внутри второго): можешь решить?

Три уровня матрёшки!

Главное

Вложенные if:

cpp
if (условие1) {
  if (условие2) {
    // выполнится если условие1 AND условие2 оба true
  }
}

Важные моменты:

  1. Внутренний if выполняется ТОЛЬКО если внешний if true
  2. Если внешний if false → внутренний if вообще не проверяется
  3. Не делай более 3 уровней вложения — код становится сложным для чтения

Вместо вложенного if можно использовать &&:

cpp
// Вложенное:
if (работаешь) {
  if (есть_задача) { ... }
}

// Эквивалент:
if (работаешь && есть_задача) { ... }

Когда использовать вложенное if?

  • Когда логика сложная и вложение делает код понятнее
  • Когда сначала нужна одна проверка, потом другая

Когда использовать &&?

  • Когда нужно просто проверить два условия одновременно

Практика

Спроси себя:

cpp
int age = 22;
bool has_job = true;
bool has_money = false;

if (age >= 18) {
  if (has_job || has_money) {
    cout << "Can move out";
  } else {
    cout << "Need job or money";
  }
} else {
  cout << "Too young";
}

age = 22 (старше 18), has_job = true, has_money = false.

Что выведется?

Подсказка: age >= 18 true, поэтому входим в первый if. has_job || has_money = true || false = true, поэтому выводим "Can move out".

© 2026 aqlacademy.kz