---
title: 2.3. Преобразование типов. Условные конструкции
tags: Templates, Talk
description: View the slide with "Slide Mode".
---
# 2.3. Преобразование типов. Условные конструкции
# План занятия
1. Преобразования числовых типов
2. Преобразования целых чисел и чисел с плавающей точкой
3. Преобразование Строк в число и наоборот
4. Условные Конструкции
5. Конструкция if/else
6. Тернарный оператор
7. Конструкция switch
---
## Вспоминаем прошлые занятия
- Чем отличается переменная от константы?
- Какие типы переменных бывают?
- Какие операции можно делать с числовыми переменными?
- Какие операции можно делать с логическими переменными?
---
## Введение
Любой программист сталкивается с ситуацией когда необходимо преобразовать данные из одного типа в другой. Самый распространенный вариант это получение данных с сервера, сервер вам передает данные в строковом формате, а в нем хранится id объекта и вам удобнее работать с ним как с Int форматом, тогда на помощь приходит преобразование типов:
```javascript=
let idObjectServer: String = "12537"// данные от сервера
let idApp = Int(idObjectServer)// преобразование для приложения
```
## Преобразования числовых типов
Для работы с целыми числами используйте тип данных Int в любых случаях, даже если работаете с отрицательными числами.
Используя стандартные типы данных в своем коде не будет возникать ошибок с несоответствием типов, так как переменные будут соответствовать одному типу данных.
Использование других типов данных для хранения целых чисел, может быть целесообразным только в тех случаях если, где-то в программе уже использованы данные типы, например для стандартизации работы программы, для улучшения производительности и работы с памятью.
## Преобразования целых чисел и чисел с плавающей точкой
Преобразование целого числа в число с плавающей точкой нужно указывать явно тип данных в который мы преобразовываем. Например:
```javascript=
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi равно 3.14159, и для него выведен тип Double
```
Здесь, для соответствия типам данных константу three преобразовали из типа Int в Double чтобы обе переменные имели одинаковый тип. Если не произвести преобразование будет выведена ошибка о несоответствии типов данных. Преобразование из Double в Int происходит так же. Например:
```javascript=
let integerPi = Int(pi)
// integerPi равен 3, и для него выведен тип Int
```
Если вы преобразуете числа с плавающей точкой в целые числа, дробная часть будет просто убираться. Например, число 5.25 будет равно 5.
Числовые литералы это числа стоящие после присвоения переменной без определенного типа:
```javascript=
let Pi = 3 + 0.14159
// Pi равен 3.14159, и для него определен тип Double
```
> Числовые литералы мы делаем математические преобразования напрямую, так как у литералов нет явного типа данных, а значение выведется уже после исполнения кода компилятором.
## Преобразование Строк в число и наоборот:
```javascript=
var strNum = "123"
let a:Int? = Int(strNum)
```
```javascript=
let x : Int = 42
var myString = String(x)
```
---
## Условные Конструкции
В языках программирования часто бывает необходимо произвести некоторые действия в зависимости от выполнения тех или иных условий.

Если определенные условия соблюдаются, то выполнить одни действия, если не соблюдаются, то выполнить другие.
Рассмотрим пример.
Допустим, нам нужно в банкомате выдать некоторую сумму денег, которая может быть доступна для выдачи, если не превышает доступный баланс или может быть не доступна для выдачи, если превышает доступный баланс.
Какие конструкции используются на языке Swift?
### Конструкция if/else
Данная конструкция проверяется условие в блоке if если он истинно выполняется блок if:
```javascript=
if условие {
// набор действий
}
```
Например:
```javascript=
let num1 = 22
let num2 = 15
if num1 > num2{
print("num1 больше чем num2")
}
```
В данном примере проверяется условие что первое число больше второго, если данное условие истинно выполнится блок if, иначе блок просто пропустит компилятор.
Как мы с вами уже знаем все условия должны быть логическими операциями. Если в условии не будет возвращаться логическое значение такой блок завершится ошибкой. Например:
```javascript=
let num1 = 22
let num2 = 15
if num1{
print("num1 больше чем num2")
}
```
Блок else используется для случаев когда нужно выполнить действие при условии не выполнившимся в блоке if:
```javascript=
let num1 = 22
let num2 = 15
if num1 > num2{
print("num1 больше чем num2")
}
else{
print("num1 меньше чем num2")
}
```
Что же делать в случае когда условий больше чем 2?
В данном случае можете указывать дополнительные условия в блоке else if. Пример сравнения чисел:
```javascript=
let num1 = 22
let num2 = 15
if num1 > num2{
print("num1 больше чем num2")
}
else if (num1 < num2){
print("num1 меньше чем num2")
}
else{
print("num1 и num2 равны")
}
```
### Тернарный оператор
Тернарный оператор используется в случаях обычного сравнения для красоты написания кода. Явных преимуществ тернарного оператора над конструкцией if нет.
Конструкция if и тернарный оператор выполняют одинаковый цикл. Синтаксис оператора:
```javascript=
[первый операнд - условие] ? [второй операнд] : [третий операнд]
```
При выполнении условия выполняется второй операнд, иначе третий:
Например:
```javascript=
var num1 = 10
var num2 = 6
var num3 = num1 > num2 ? num1 - num2 : num1 + num2
```
---
### Конструкция switch
Данная конструкция напоминает конструкцию if/else. Она так же может обработать несколько условий:
```javascript=
var num: Int = 27
switch num {
case 0:
print("Переменная равна 0")
case 18:
print("Переменная равна 18")
case 27:
print("Переменная равна 27")
default:
print("Не удалось распознать число")
}
```
Алгоритм работы данной конструкции:
После слова switch указываем сравниваемое значение.
Далее это значение поочередно сравнивается со значениями указанными после операторов case. При совпадении выполнится определенный блок case, default блок выполнится в том случае если сравнения не найдутся в блоках case.
В примере переменная num равна 27, следовательно, будет выполнен следующий case:
```javascript=
case 27:
print("Переменная равна 27")
```
Так же в любом блоке можно указывать ключевое слово break для выхода из конструкции switch.
Например:
```javascript=
var num: Int = 0
switch num {
case 0:
print("Переменная равна 0")
case 22:
break
case 44:
print("Переменная равна 44")
default:
break
}
```
В данном примере если число не равно 0 или 44 тогда выполнится блок в котором есть оператор break, и произойдет выход из конструкции switch.
Если нам необходимо сравнить несколько значений, а остальные значения просто вывести в блоке case используем символ нижнего подчеркивания _ . Например:
```javascript=
let number = 5
switch number {
case 1:
print("Number = 1")
case 2:
print("Number = 2")
case _:
print("Number не равно ни 1, ни 2, но не факт")
}
```
Можно сравнить не только с конкретным значением, но и с группой. Например:
```javascript=
var num: Int = 14
switch num {
case 0, 10: // если num равно 0 или 10
print("Переменная равна 0 или 10")
case 11..<20: // если num в диапазоне от 11 до 20, не включая 20
print("Переменная находится в диапазоне от 11 до 20")
case 20...30: // если num в диапазоне от 20 до 30
print("Переменная находится в диапазоне от 20 до 30")
default:
print("не удалось распознать число")
}
```
Оператор case 0, 10 сработает, только когда значение равно 0 или 10.
Оператор case 11...<20 сработает если значение будет в диапазоне от 11 до 20 не включая 20
Оператор case 20...30 сработает если значение находится в диапазоне от 20 до 30 включая обе границы.
В версии Swift 4 можно не указывать одну из границ. Например:
```javascript=
let num = 8
switch i {
case ...<0:
print("num - отрицательное число")
case 1...:
print("num - положительное число")
case 0:
print("num равно 0")
default:break
}
```
Связывание значений
Механизм связывания значений позволяет определить в блоках case переменные и константы значение которых будет определено с помощью значения условия
```javascript=
let number = 5
switch number {
case 1:
print("Number = 1")
case 2:
print("Number = 2")
case let n:
print("Number = \(n)")
}
```
В данном случае если значение number не равно 1 и 2, то оно передается константе n, которая используется в рамках своего блока case.
Оператор where
В блоке case можно задавать дополнительные условия с помощью оператора where. Например:
```javascript=
let i = 8
switch i {
case let k where k < 0:
print("i - отрицательное число")
case let k where k > 0:
print("i - положительное число")
case 0:
print("i is 0")
default:break
}
```
---
## Домашнее задание:
Вам необходимо написать программу для оценки графиков характеризующих движение валюты в течении дня. У вас есть 3 числа A B C и формула D=B * B - 4AC, где D - возможное движение графика. Если D > 0 график скорее всего продолжит направление, Если D < 0 график скорее всего поменяет направление, Если D = 0 Неопределенная ситуация нужно ждать.
Вывести в консоль строку указывающую движение графика (в зависимости от полученного D)
Реализовать выбор условия 3-мя вариантами (if-else, тернарный оператор, switch)
Задачу реализовать в playground.