Условный оператор if else — это конструкция ветвления: она выполняет один блок кода, если условие истинно, и другой — если условие ложно. Название темы «if else then» часто используют как общее, но слово then — обязательная часть синтаксиса не во всех языках. Разберем, как ветвление работает на уровне логики, как оно записывается в Python, JavaScript и Pascal, и когда вместо цепочки if стоит взять тернарный оператор или match.
Содержание
- Как работает ветвление: булева логика
- Синтаксис if в разных языках: где есть then, а где нет
- if / elif / else в Python: рабочий пример
- Тернарный оператор: короткая запись if-else
- match в Python 3.10+: ветвление по образцу
- Частые ошибки при работе с ветвлением
- Выводы
- Где применяется / связь с практикой
- FAQ
Как работает ветвление: булева логика
В основе любого условного оператора лежит булева логика: результат проверки условия сводится к одному из двух значений — истина (true) или ложь (false). Если условие истинно, программа выполняет один блок инструкций, если ложно — другой (или не выполняет ничего).
Сложные условия строятся из простых через логические операторы:
— and (логическое И) — составное условие истинно, только если истинны все его части;
— or (логическое ИЛИ) — составное условие истинно, если истинна хотя бы одна часть;
— not (отрицание) — меняет результат проверки на противоположный.
Это единый принцип для всех языков программирования. А вот то, как записывается сама конструкция ветвления, — уже дело конкретного языка.
Синтаксис if в разных языках: где есть then, а где нет
Утверждение «в любом if есть then» неверно — это особенность конкретных языков, а не общее правило ветвления. В части языков then обязателен, в части — отсутствует вовсе.
| Язык | Конструкция | Ключевое слово then | Как выделяется блок кода |
|---|---|---|---|
| Python | if / elif / else | нет | отступ (обычно 4 пробела) |
| JavaScript, C, Java | if / else if / else | нет | фигурные скобки { } |
| Pascal, Delphi | if … then … else | да, обязательно | begin … end для нескольких инструкций |
| VBA, VB.NET | If … Then … Else | да | End If |
В Python и JavaScript слова then нет вообще — это не ошибка и не упрощение старого кода, а особенность синтаксиса этих языков с самого начала. В Pascal и Visual Basic then — обязательное служебное слово: без него код не скомпилируется. Поэтому дальше в статье основные примеры даны на Python (без then), а особенности Pascal и JavaScript отмечены отдельно, где они отличаются.
if / elif / else в Python: рабочий пример
Вот полный пример, который можно скопировать и запустить целиком:
age = 20
if age < 18:
print("Доступ ограничен")
elif age < 65:
print("Стандартный доступ")
else:
print("Льготный доступ")
Результат в консоли:
Стандартный доступ
Как это работает по шагам:
1. Python проверяет первое условие age < 18. Для age = 20 оно ложно, блок под if пропускается.
2. Проверяется elif age < 65 — оно истинно, выполняется именно этот блок, и на этом проверка останавливается.
3. Ветка else выполнилась бы, только если бы ни одно из условий выше не оказалось истинным.
Веток elif может быть сколько угодно, а ветки else может не быть вообще — тогда при ложности всех условий программа просто ничего не выполнит (неполное ветвление).
Частая ошибка новичков — пропущенное двоеточие после условия:
if age < 18
print("Доступ ограничен")
Результат:
SyntaxError: expected ':'
Исправление — добавить двоеточие в конце строки с условием: if age < 18:. Вторая типичная ошибка — смешение пробелов и табуляции в отступах одного блока: Python 3 не позволяет их смешивать и завершает выполнение с TabError: inconsistent use of tabs and spaces. Решение — настроить редактор на один тип отступа, обычно 4 пробела.
Тернарный оператор: короткая запись if-else
Тернарный оператор возвращает одно из двух значений в зависимости от условия — без блоков кода, в одну строку. Это сокращенная форма записи полного ветвления с двумя ветвями.
В Python:
number = 7
result = "четное" if number % 2 == 0 else "нечетное"
print(result)
Результат: нечетное. Порядок частей отличается от привычного switch-подобного — сначала идет выражение для истинного случая, затем условие, затем выражение для ложного.
В JavaScript та же логика записывается через ? и ::
const number = 7;
const result = number % 2 === 0 ? "четное" : "нечетное";
console.log(result);
В классическом Pascal и Delphi отдельного оператора-тернарника нет: короткую запись выбора из двух значений дает не оператор языка, а функция IfThen из модулей Math (для чисел) или StrUtils (для строк) во FreePascal и Lazarus. Точное покрытие по конкретным версиям Delphi зависит от набора подключенных модулей и вынесено ниже отдельным пунктом.
match в Python 3.10+: ветвление по образцу
Начиная с Python 3.10 (PEP 634) в языке появилась конструкция match / case — структурное сопоставление с образцом. На версиях Python ниже 3.10 она недоступна, там для того же сценария нужна цепочка if/elif/else.
command = "start"
match command:
case "start":
print("Запуск")
case "stop":
print("Остановка")
case _:
print("Неизвестная команда")
Результат: Запуск. Здесь case _ — это универсальный шаблон, аналог else/default: он сработает, если ни один из явных вариантов не совпал.
В отличие от switch в C-подобных языках, match не требует break между ветками и не «проваливается» в следующий case, если не остановить выполнение явно — совпавшая ветка выполняется одна, и на этом сравнение завершается. Кроме сравнения с конкретным значением, match умеет разбирать структуру данных (кортежи, словари с определенными ключами), но это уже отдельная, более широкая тема за рамками базового ветвления.
Частые ошибки при работе с ветвлением
| Симптом | Причина | Исправление |
|---|---|---|
| Ветка elif никогда не выполняется | Более общее условие стоит раньше и перехватывает все случаи | Проверять условия от частного к общему |
| IndentationError или TabError в Python | Смешаны пробелы и табуляция в одном блоке | Настроить редактор на один тип отступов (обычно 4 пробела) |
| Ветка else выполняется неожиданно (в JS/PHP) | В условии использован = (присваивание) вместо ==/=== (сравнение) |
Использовать === для строгого сравнения, = — только для присваивания |
| Код превращается в лестницу из вложенных if | Слишком глубокая вложенность вместо elif/match | Развернуть в плоский elif-список или match/case по конкретным значениям |
Выводы
- if else — базовая конструкция ветвления, она есть во всех языках программирования, но синтаксис и наличие слова then различаются по языкам.
- В Python ветвление записывается как if / elif / else с отступами; ключевого слова then в Python нет.
- В Pascal и VB then обязателен, в Python и JavaScript — отсутствует; это особенность языка, а не ошибка.
- Тернарный оператор — короткая запись выбора одного из двух значений без полноценного блока if-else.
- match/case (Python 3.10+) удобен для ветвления по нескольким конкретным значениям вместо длинной цепочки elif.
Где применяется / связь с практикой
Условные конструкции — это то, с чего начинается работа с логикой в любом языке: проверка прав доступа, обработка ввода пользователя, выбор ветки алгоритма в зависимости от данных. Без уверенного владения if/elif/else и match сложно переходить к более объемным задачам — циклам, функциям, обработке ошибок.
Освойте тему на практике
Если нужен структурированный разбор синтаксиса Python с практикой на реальных задачах, а не только чтение статей, посмотрите курс Python для начинающих в Otus. Проверить формат обучения можно и без обязательств — на открытых уроках.
Смежные темы: циклы в программировании, типы данных в языках программирования.
FAQ
Можно ли использовать if без else?
Да, это неполное ветвление: если условие ложно, программа просто пропускает блок под if и переходит к следующей инструкции.
Чем if/elif/else в Python отличается от нескольких вложенных if?
elif — это одна цепочка проверок на одном уровне отступа, которая останавливается на первом истинном условии. Вложенные if — самостоятельные проверки внутри друг друга, каждая требует своего отступа, и код быстрее превращается в трудночитаемую лестницу.
Работает ли match в Python до версии 3.10?
Нет, конструкция match/case появилась в Python 3.10 (PEP 634). На более ранних версиях для того же сценария нужно использовать цепочку if/elif/else.



