Skip to content

if-else-if-else

if-else-if-else — это самый базовый инструмент принятия решений в программировании. Его логика очень интуитивна: если условие истинно, выполняется определённый блок кода; иначе проверяется следующее условие; если ни одно не выполняется, выполняется путь по умолчанию.

Базовый синтаксис

В грамматической спецификации определения выражения if и оператора if полностью совпадают:

if Expr Block ('else' 'if' Expr Block)* ('else' Block)?

Перевод на обычный язык: выражение начинается с if, за которым следует условие и блок кода, затем может следовать от нуля до нескольких else if условие блок_кода, и в конце может быть один необязательный else блок_кода.

Самая простая форма — только if:

yaoxiang
if temperature > 30 {
    print("Жарко, включаем кондиционер")
}

Добавим else:

yaoxiang
if is_raining {
    print("Возьми зонт")
} else {
    print("Зонт не нужен")
}

Несколько условий через else if:

yaoxiang
score = 85

if score >= 90 {
    print("Отлично")
} else if score >= 80 {
    print("Хорошо")
} else if score >= 60 {
    print("Удовлетворительно")
} else {
    print("Нужно подтянуть")
}

if как выражение

Это важнейшая особенность управления потоком выполнения в YaoXiang: if можно использовать как выражение, которое вычисляет значение.

yaoxiang
// if выражение: значение ветки присваивается result
result = if x > 0 {
    "Положительное"
} else if x < 0 {
    "Отрицательное"
} else {
    "Ноль"
}
// result теперь одно из: "Положительное", "Отрицательное" или "Ноль"

Когда if используется как выражение, типы возвращаемых значений всех веток должны совпадать:

yaoxiang
score = 88

// Все ветки возвращают String, типы совпадают
grade = if score >= 90 {
    "A"
} else if score >= 80 {
    "B"
} else if score >= 60 {
    "C"
} else {
    "D"
}
print(grade)  // "B"

В каждой ветке последнее выражение в блоке кода становится возвращаемым значением. Можно использовать явный return, но обычно достаточно просто записать выражение.

yaoxiang
// Просто записать выражение — рекомендуется
category = if age < 18 { "Несовершеннолетний" } else { "Взрослый" }

// Можно и явный return — результат тот же
category = if age < 18 {
    return "Несовершеннолетний"
} else {
    return "Взрослый"
}

Если if используется только для условного выполнения без получения значения — это обычный оператор, полностью совместимый с формой выражения.

Вложенный if

Можно писать if внутри if для многоуровневых проверок:

yaoxiang
age = 25
has_ticket = true

if age >= 18 {
    if has_ticket {
        print("Добро пожаловать")
    } else {
        print("Сначала купите билет")
    }
} else {
    print("Несовершеннолетним требуется сопровождение родителей")
}

При вложении выражений в YaoXiang нет неоднозначности "висящего else", как в C — каждый else всегда принадлежит ближайшему непарному if.

Комбинирование условий с помощью логических операторов

В условиях можно использовать and, or, not для объединения нескольких проверок:

yaoxiang
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 — стандартный способ обхода коллекций и диапазонов.