Урок 5. Условная конструкция If/else
Главная / Уроки / Страница блока Основы / Урок 5. Условные конструкции
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, проверяет его: