if-else-if-else
if-else-if-else — это самый базовый инструмент принятия решений в программировании. Его логика очень интуитивна: если условие истинно, выполняется определённый блок кода; иначе проверяется следующее условие; если ни одно не выполняется, выполняется путь по умолчанию.
Базовый синтаксис
В грамматической спецификации определения выражения if и оператора if полностью совпадают:
if Expr Block ('else' 'if' Expr Block)* ('else' Block)?Перевод на обычный язык: выражение начинается с if, за которым следует условие и блок кода, затем может следовать от нуля до нескольких else if условие блок_кода, и в конце может быть один необязательный else блок_кода.
Самая простая форма — только if:
if temperature > 30 {
print("Жарко, включаем кондиционер")
}Добавим else:
if is_raining {
print("Возьми зонт")
} else {
print("Зонт не нужен")
}Несколько условий через else if:
score = 85
if score >= 90 {
print("Отлично")
} else if score >= 80 {
print("Хорошо")
} else if score >= 60 {
print("Удовлетворительно")
} else {
print("Нужно подтянуть")
}if как выражение
Это важнейшая особенность управления потоком выполнения в YaoXiang: if можно использовать как выражение, которое вычисляет значение.
// if выражение: значение ветки присваивается result
result = if x > 0 {
"Положительное"
} else if x < 0 {
"Отрицательное"
} else {
"Ноль"
}
// result теперь одно из: "Положительное", "Отрицательное" или "Ноль"Когда if используется как выражение, типы возвращаемых значений всех веток должны совпадать:
score = 88
// Все ветки возвращают String, типы совпадают
grade = if score >= 90 {
"A"
} else if score >= 80 {
"B"
} else if score >= 60 {
"C"
} else {
"D"
}
print(grade) // "B"В каждой ветке последнее выражение в блоке кода становится возвращаемым значением. Можно использовать явный return, но обычно достаточно просто записать выражение.
// Просто записать выражение — рекомендуется
category = if age < 18 { "Несовершеннолетний" } else { "Взрослый" }
// Можно и явный return — результат тот же
category = if age < 18 {
return "Несовершеннолетний"
} else {
return "Взрослый"
}Если if используется только для условного выполнения без получения значения — это обычный оператор, полностью совместимый с формой выражения.
Вложенный if
Можно писать if внутри if для многоуровневых проверок:
age = 25
has_ticket = true
if age >= 18 {
if has_ticket {
print("Добро пожаловать")
} else {
print("Сначала купите билет")
}
} else {
print("Несовершеннолетним требуется сопровождение родителей")
}При вложении выражений в YaoXiang нет неоднозначности "висящего else", как в C — каждый else всегда принадлежит ближайшему непарному if.
Комбинирование условий с помощью логических операторов
В условиях можно использовать and, or, not для объединения нескольких проверок:
username = "admin"
password = "123456"
// and: оба условия истинны
if username == "admin" and password == "123456" {
print("Вход выполнен")
}
// or: хотя бы одно условие истинно
if role == "admin" or role == "moderator" {
print("Есть права администратора")
}
// not: инверсия
if not is_banned {
print("Можно писать")
}
// Комбинация
if (age >= 18 and age <= 60) or is_vip {
print("Можно участвовать")
}Приоритет операторов: not выше and, and выше or. При сомнениях используйте скобки для ясности.
Краткое резюме
| Пункт | Описание |
|---|---|
| Базовая структура | if условие { ... } else if условие { ... } else { ... } |
| else if | В YaoXiang используется else if для множественных ветвлений |
| Выражение | if может возвращать значение, все ветки должны иметь одинаковый тип |
| Возврат из ветки | Значение последнего выражения в блоке является возвращаемым |
| Вложенность | if можно вкладывать друг в друга, нет неоднозначности висящего else |
| Логические операторы | and, or, not для комбинирования условий |
В следующей главе вы изучите цикл for — стандартный способ обхода коллекций и диапазонов.
