Выбор ответа Junior Опционалы спрашивают часто обновлено

Разница между guard let и if let

Вопрос

Чем guard let x = value else { ... } отличается от if let x = value { ... }?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: После guard x доступна до конца области, а else обязан выйти. guard нужен для раннего выхода: если условие не выполнено, else должен покинуть область (return, throw, break, continue или вызов Never-функции), и компилятор это проверяет.

Варианты ответа

  1. guard распаковывает принудительно и падает на nil
  2. guard можно использовать только в циклах и switch, а if let везде
  3. После guard x доступна до конца области, а else обязан выйтиправильный ответ
  4. Разницы нет, это синонимы с разным порядком веток

Разбор

guard нужен для раннего выхода: если условие не выполнено, else должен покинуть область (return, throw, break, continue или вызов Never-функции), и компилятор это проверяет. Зато распакованное значение живёт после guard до конца функции, без лишней вложенности. if let даёт значение только внутри своего блока. Падения на nil у guard нет, и ограничения «только в циклах» тоже.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме