Язык Swift часть 8. Старый добрый if/else

Операторы контроля потока в Swift очень похожи в написании их синтаксиса на языки из семейства C. Но похожий синтаксис не означает идентичный. Давайте разберемся в чем заключаются ключевые отличия при написании if на языке программирования Swift.

Swift отличается свежим и прозрачным подходом в написании кода. Код должен быть всегда очевиден и понятен не только разработчику, который его написал, но и другим разработчикам, которым предстоит работать с этим кодом.

Рассмотрим самый базовый и фундаментальный оператор условия в любом языке программирования, оператор if. Или, правильнее сказать, if/else.

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

Полученный код будет выглядеть примерно так:

// Типичное условие if
var points = 10
if (points > 5)
  print("Больше чем пять");
else
  print("Не больше пяти");

Данный код вполне соответствовал бы большинству языков программирования. Но код, который напишет типичный Swift-программист будет выглядеть чуточку иначе. Существуют не большие нюансы в Swift подходе и о них необходимо упомянуть. Давайте сравним:

// Swift стайл if условие
var points = 10
if points > 5 {
  print("Больше чем пять")
} else {
  print("Не больше пяти")
}
  1. Круглые скобочки для условия писать не нужно;
  2. ; тоже убираем;
  3. Круглые скобочки { } - необходимое условие для написания условия.

Подход в написании программ на языке Swift предполагает, что мы должны держать код максимально простым и чистым. Все что можно убрать, и это не отразится на работе программы - нужно убирать.

В первом пункте мы убираем скобочки из условия. Если мы их оставим, программа так же успешно выполнится. Но в данном случае они не нужно. Скобочками следует ограждать только сложные условия, в которых много составных операторов, тогда это действительно необходимо для читабельности кода.

Во втором пункте мы убираем точку с запятой. Swift поддерживает точку с запятой в программах, и оставить ее ошибкой не будет. Но мы должны всегда следить за простотой и читабельностью своего кода. Ставьте ; только тогда, когда это действительно необходимо. Например при написании нескольких выражений в одной строчке, тогда их нужно разделить ;.

А вот третий пункт является жизненно важным. Каждый логический элемент в языке Swift должен начинаться с { и заканчиваться }. Без этого код не скомпилируется.

Для многих языков программирования данный код будет полностью рабочим:

// С++
if (points > 5)
  printf("Больше чем пять");

Но только не для Swift. if должен начинаться с { и заканчиваться }.

// Swift
if points > 5 {
  print("Больше чем пять")
}

И это главное условие. Наличие круглых скобочек делает код более безопасным.

Идем дальше.

Условие в Swift должно соответствовать типу Bool. Оно должно возвращать true или false. Это может показаться очевидным. Однако в некоторых языках программирования проверка условия происходит при сравнении с единицей или нулем. Swift это так не работает.

Рассмотрим пару примеров:

// Пример 1
if counter > 10 000 {
  print("True")
} else {
  print("False")
}

// Пример 2
if cityName == "Moscow" { ... }

// Пример 3
if someOptional != nil { ... }

// Пример 4
let userLoggedIn = false
let perkEnabled = true
// Тут не нужно спрашивать условие. По умолчанию идет сравнение с true. Если userLoggedIn эквивалентно true то...
if userLoggedIn { ... }
if perkEnabled { ... }

Когда мы пишем условие мы используем все основные операторы сравнения:

if a == b { ... }
if a != b { ... }
if a > b { ... }
if a < b { ... }
if a >= b { ... }
if a <= b { ... }

Для работы с несколькими условиями используются логические И && и логическое ИЛИ ||

// Логическое И
if a == b && c != d { ... }

// Логическое ИЛИ
if a < b || a > c { ... }

При использовании сложных выражений ограждаем их скобочками:

if ((score >= highScore) && (bonus == 0)) || ((score * bonus) - penalty) >= highScore { ... }