Вложенные if: Матрёшка
Вспомни матрёшку: большая кукла, открыл — внутри средняя кукла, открыл её — внутри маленькая.
В коде то же самое: if внутри if — это вложенные условия.
Что такое вложенное if
Представь сценарий:
- Сначала проверяем: "На улице хороший день?"
- Если да, то проверяем: "Днём свободно?"
- Если да → идём гулять
- Если нет → сидим дома
if (хороший_день) {
if (свободен) {
гуляем()
}
}
Видишь? Второй if находится внутри первого.
nice_weather = true (день хороший), но free_today = false (нет времени).
Заметь: второй if выполнился внутри первого.
Оба условия правда
Теперь и день хороший, и время есть. Что изменится?
nice_weather = true И free_today = true.
Видишь? Оба условия true, поэтому мы прошли сквозь обе проверки.
Первое условие ложь
А если день плохой (nice_weather = false)?
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";
}
Реальный пример: вход в кино
Хочешь в кино:
- Сначала проверяем: есть ли кинотеатр поблизости?
- Если да, то: есть ли свободные места?
- Если да → покупаем билет
- Если нет → едем в другой кинотеатр
- Если нет → остаемся дома
- Если да, то: есть ли свободные места?
cinema_nearby = true, seats_available = true.
Три уровня: матрёшка из трёх
Можно вложить даже три условия! Но не переусложняй.
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:
if (условие1) {
if (условие2) {
// выполнится если условие1 AND условие2 оба true
}
}
Важные моменты:
- Внутренний if выполняется ТОЛЬКО если внешний if true
- Если внешний if false → внутренний if вообще не проверяется
- Не делай более 3 уровней вложения — код становится сложным для чтения
Вместо вложенного if можно использовать &&:
// Вложенное:
if (работаешь) {
if (есть_задача) { ... }
}
// Эквивалент:
if (работаешь && есть_задача) { ... }
Когда использовать вложенное if?
- Когда логика сложная и вложение делает код понятнее
- Когда сначала нужна одна проверка, потом другая
Когда использовать &&?
- Когда нужно просто проверить два условия одновременно
Практика
Спроси себя:
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".