Управление потоком
Обычно код идёт сверху вниз, строка за строкой. Управление потоком даёт две силы: ветвиться (выбрать путь) и повторять (цикл).
if / else — развилка
«Если условие — иди сюда, иначе — туда». Как развилка на дороге.
if (age >= 18) {
System.out.println("пускаем");
} else {
System.out.println("не пускаем");
}
Цикл — повтор
«Сделай 5 раз». Тело повторяется, пока условие верно.
for (int i = 0; i < 5; i++) { // i от 0 до 4
System.out.println(i);
}
int n = 3;
while (n > 0) { // пока условие верно
n--;
}
break — выйти из цикла досрочно. continue — пропустить текущий шаг и пойти на следующий.
Копнуть глубже
switch — когда веток много. Вместо лесенки if — else if — else if берут switch: значение «раскидывается» по веткам.
String name = switch (day) {
case 1 -> "Понедельник";
case 2 -> "Вторник";
default -> "Другой день";
};
Какой цикл когда:
| Цикл | Когда брать |
|---|---|
for | известно, сколько раз |
while | пока условие верно (число неизвестно) |
do-while | выполнить хотя бы раз, потом проверка |
for-each | пройтись по коллекции/массиву без индекса |
for (String name : names) { // for-each — по каждому элементу
System.out.println(name);
}
Тернарный оператор — короткий if для присваивания: String s = age >= 18 ? "взрослый" : "ребёнок";
Под капотом
В процессоре нет «if» — есть только сравнение и прыжок. Компилятор превращает if в инструкции: сравнить → если условие ложно, перепрыгнуть (goto) через тело.
Что из этого следует:
- Предсказание ветвлений (branch prediction). Процессор заранее «угадывает», по какой ветке пойдёт
if, и начинает её выполнять. Угадал — быстро; промахнулся — небольшая задержка. Поэтому предсказуемые условия работают быстрее хаотичных. - JIT разворачивает циклы (loop unrolling). Горячий цикл компилятор может «развернуть» — выполнить несколько шагов за один проход, чтобы реже проверять условие.
- Бесконечный цикл.
while (true)безbreakили выхода будет крутиться вечно — частая ошибка новичка. У цикла всегда должно быть условие выхода.
🎤 Закрыл тему, если можешь объяснить:
• чем `if/else` отличается от цикла, что делают `break` и `continue`;
• когда `switch`, а когда разные циклы (если дошёл до 2-го слоя);
• во что превращается `if` под капотом и что такое предсказание ветвлений (если дошёл до 3-го слоя).
• когда `switch`, а когда разные циклы (если дошёл до 2-го слоя);
• во что превращается `if` под капотом и что такое предсказание ветвлений (если дошёл до 3-го слоя).