Урок 5. Условная конструкция If/else

1 Ноября 2022

Прежде чем мы погрузимся в условные конструкции, давайте рассмотрим одну очень полезную функцию, которая нам поможет выводить результат на консоль.

Вам еще эта тема не знакома, но я о ней обязательно расскажу на одном из уроков. Ну а пока нам нужна функция которая называется print и выглядит она следующим образом:

				
					print()
				
			
Все что мы поместим в круглые скобки этой функции будет отображаться на консоли:

Таким образом мы можем выводить на консоль любой тип данных, давайте выведем число:

С остальными базовыми типами данных (Bool, Double ….) будет работать точно так же

Улавливаете суть?!

Пока вам этой информации будет достаточно. Давайте уже перейдем к основной теме урока. 

Конструкция if

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

Что я имею в веду?!

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

Давайте теперь представим что вы разрабатываете приложение по продажам хлебушка, пользователь выбирает булочку и жмет на кнопку “Купить”, и в этот момент мы запускаем проверку, если у пользователя в кошельке есть эта сумма, то мы кладем хлебушек на оплату, если нет то ничего не происходит (мы только начали разработку и еще не все шаги продумали)

Отразим это в коде:

				
					let product = "Булочка"
let price = 50
let wallet = 50
				
			

У нас есть три свойства, product будет хранить в памяти тот товар который выберет пользователь, price – это стоимость товара, а wallet будет отражать баланс в кошельке пользователя.

Теперь нам нужно придумать условие при котором эту булочку можно будет купить.

Условная конструкця if записывается следующим образом:

				
					let product = "Булочка"
let price = 50
let wallet = 50

if wallet >= price {
    print("Купить товар: \(product)")
}
				
			

Ключевым словом if мы показываем компилятору, что здесь будет условие, далее идет само условие, которое должно вернуть либо true, либо false, и в зависимости от результата, код в фигурных скобках либо будет выполнен либо нет.

Если денег в кошельке больше или равно стоимости товара, то мы выводим на консоль сообщение Купить товар: Булочка, иначе ничего не происходит. Давайте запустим компилятор и посмотрим на результат:

34 это вывод свойства myAge, которое мы реализовали ранее. Ну а фраза “Купить товар: Булочка” это то что мы ожидали увидеть. 

Давайте разберем наш код по частям:

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

В фигурных скобках мы отображаем тело условной конструкции. Там можно прописать совершенно любую логику. 

Давайте теперь немного изменим входные данные:

Булочка вдруг подорожала и наше условие начало возвращать false, соответсвенно и код в фигурных скобках не выполняется и результат на консоли мы не увидим, компилятор его проигнорирует.

То есть он проверяет, если условие вернуло false, то можно в блок с кодом даже не заглядывать и не выполнять его. 

Давайте посмотрим на синтаксис условной конструкции if:

В качестве условия может быть и обычное логическое свойство:
				
					let product = "Булочка"
let price = 50
let wallet = 50

let result = wallet >= price

if result {
    print("Купить товар: \(product)")
}
				
			

Мы присваиваем свойству  result результат логического выражения, таким образом данное свойство будет иметь логическое значение:

Если свойство содержит в себе true то блок кода в условной конструкции будет выполнен, если false то компилятор его проигнорирует. 

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

Конструкция if /else

Отлично! Мы теперь можем запускать определенный блок кода, только в тот момент когда условие возвращает true. но что если мы хотим что то выполнить если условие вернет false, например если у нас не достаточно денег на булочку, то мы выводим сообщение на консоль о том что нужно пополнить кошелек. Для этого можно использовать дополнительную ветку else у конструкции if:

				
					let result = wallet >= price

if result {
    print("Купить товар: \(product)")
} else {
    print("Не достаточно денег в кошельке")
}
				
			
Запустим компилятор:

Так как выражение wallet >= price возвращает false (выше мы установили стоимость 70 а денег в кошельке 50) то result у нас хранит значение false, а это значит что первый блок кода не срабатывает, а вот ветка else будет срабатывать каждый раз когда первый блок не отрабатывает.

Но стоит нам поменять значение у цены на 40, то мы увидим другой результат:

Компилятор проверяет первое условие, оно возвращает ture, соответсвенно выполняется блок кода: print(“Купить товар: \(product)”), а ветку else компилятор игнорирует, то есть выполняется что то одно, две ветки в одно время выполнится не могут.

Обратите внимание на синтаксис конструкции открывающая фигурная скобка идет сразу после условия, код внутри фигурных скобок записывается на новой строке с надлежащим отступом. И закрывающая скобка так же на новой строке.

Если у вас проблема с отступами, то выделите блок кода, который вы хотите выровнять и нажмите control + i

Синтаксис такой конструкции будет выглядеть следующим образом:

Ветка else является дефолтной, то есть если не выполнится не одно из условий, то сработает она. Таким образом мы всегда получим результат.

Конструкция if / else if

Продолжаем развивать нашу программу, и следующим шагом будет обработать еще одно условие.

Предположим нам нужно вернуть сдачу за купленный товар, для этого нам нужно добавить одно свойство change и еще одно условие для проверки, мы немного изменим наше ветвление if:

				
					let product = "Булочка"
let price = 50
let wallet = 50
let change: Int

if wallet == price {
    print("Купить товар: \(product)")
} else if wallet > price {
    change = wallet - price
    print("Вы купили товар, ваша сдача: \(change)")
} else {
    print("Не достаточно денег в кошельке")
}
				
			

Можно было сразу передать в принт вычисления без дополнительного свойства: print(“Вы купили товар, ваша сдача: \(wallet – price)”, без создания дополнительного свойства, но это будет ошибкой. Никакие расчеты не нужно выносить в print

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