---
# System prepended metadata

title: '2.2. Переменные, константы, типы данных, необязательные типы'
tags: [' Talk', Templates]

---

---
title: 2.2. Переменные, константы, типы данных, необязательные типы
tags: Templates, Talk
description: View the slide with "Slide Mode".
---

# 2.2. Переменные, константы, типы данных, необязательные типы

# План занятия
1. Переменные и константы (var let)
2. Числовые типы данных
3. Строковые типы данных
4. Логические типы данных
5. Логические операции
6. Операции сравнения
7. Опционалы


---

## Вспоминаем прошлые занятия

- Как называется возможность в пограмме Xcode изучать код не создавая проект для разработки?
- Как инициализировать переменную?

---

## Переменные и константы (var let)

Бывают случае когда нам необходимо использовать одно и тоже число в своих расчетах. Например коэффициент начисления заработной платы в зависимости он региона:
Что будет если в данном случае использовать переменную
```javascript=
var k = 12.7 // наш коэффициент
..... 
//код вычисление заработной платы сотрудников отдела
.....
k = 12.3 // Случайное переопределение коэффициента

// продолжение кода вычисления зп
// ошибка при расчетах
```
Как избежать данного переопределения коэффициента?
Нам на помощь приходят константы
```javascript=
let k = 12.7 // наш коэффициент который невозможно изменить
..... 
//код вычисление заработной платы сотрудников отдела
.....
k = 12.3 // Случайное переопределение коэффициента
// На данном месте будет ошибка компиляции кода 
// и наша программа не будет работать
// Переопределение констант невозможно

// продолжение кода вычисления зп

```


Как мы знаем, переменные обозначаются словом var, но что  делать если нам нужно объявить констату чтобы она никогда не изменялась? 

В данном случае нам поможет ключевое слово let.

```javascript=
var name = "Vadim" // Объявили переменную и инициализировали ее
name = "Andrey" // переопределили значение переменной

let g: Double = 9.8 // Объявили константу g инициализировали ее
// g - (ускорение свободного падения)
g = 10 // Ошибка! Нельзя переопределять константы

let pi: Double // Объявили константу pi
pi = 3.14 // Инициализировали константу pi значением 3.14
// В данном случае ошибки не будет, потому что константа еще не была определена после объявления
```
Константы используются в том случае когда значение переменной постоянно на протяжении всей работы программы.

---

## Типы данных

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

## Числовые типы данных

- Int - целое число
- Double - 64-битное число с плавающей точкой, содержит до 15 чисел в дробной части
- Float - 32-битное число с плавающей точкой, содержит до 6 чисел в дробной части

```javascript=
let age: Int = 21 // Хранение целых чисел напрмер возраст
```
Разница между Double и Float
![](https://i.imgur.com/vYhfN0P.png)
Тип Double получает более корректное отображение числа в отличие от Float:
```javascript=
var longitude: Double
```
В данном примере мы видим основное отличие между типами Double и Float. Отличие заключается в отображении числа и его дробной части. Однако при попытке ввода большого числа вроде 987654321,987654321 результат будет округлен до 987654321,9876543.


## Операции с числовыми данными 

В программировании как и в математике можно производить математические операции с числовыми значениями. Давайте рассмотрим все возможные на примерах.

- Сложение + 
```javascript=
var a = 14
var b = 16
var c = a + b // 30
```
- Вычитание -
```javascript=
var a = 18
var b = 5
var c = a - b // 13
```
- Унарный минус. Умножение на -1
Данная операция используется для смены знака значения переменной.

```javascript=
var a = -8
var b = -а // 8
var c = -b // -8
```
- Умножение *
```javascript=
var a = 3
var b = 4
var c = a * b // 12
```
- Деление /
```javascript=
var a = 12
var b = 3
var c = a / b // 4
```
При делении стоит учитывать, какие данные участвуют в делении, и какой результат мы хотим получить. Например, в следующем случае выполняется деление дробных чисел:

```javascript=
let n : Double = 14
let d : Double = 4
let x : Double = n / d // 3.5
```
Результатом операции чисел Double является значение типа Double, которое равно 3.5. Но если мы возьмем значения типа Int, то результат будет иным:
```javascript=
let n : Int = 14
let d : Int = 4
let x : Int = n / d // 3
```
При делении целочисленных значений дробная часть отбрасывается
- Остаток от деления %
```javascript=
var a = 11
var b = 3
var c = a % b // 2
```
---

## Арифметические операции с присваиванием

Мы уже с вами знаем что любые действия с переменными можно делать если они одного типа данных, так и с арифметическими операциями.
```javascript=
var a: Int = 6
var b: Double = 12.8
var c = a + b // Ошибка так как данные имеют разный формат
var d: Double = 7.0
var e = b + d // 19.8
```

Есть Арифметические операции которые выполняются с присваиванием.

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

- +=
```javascript=
var a = 16
a += 10
print(a)	// 26
// Аналогичная запись 
// a = a + 10
```
- -=
```javascript=
var a = 20
a -= 6
print(a)	// 14
// Аналогичная запись 
// a = a - 6
```

- *=
```javascript=
var a = 20
a *= 6
print(a)	// 120
// Аналогичная запись 
// a = a * 6
```
- /=
```javascript=
var a = 20
a /= 4
print(a)	// 5
// Аналогичная запись 
// a = a / 4
```

- %=
```javascript= 
var a = 22
a %= 4
print(a)	// 2
// Аналогичная запись 
// a = a % 4
```

## Строковые типы данных

В данном блоке есть 2 типа данных: Character и String.
Character - символ, может содержать только 1 символ.
String — строка, может не содержать символов или содержать их множество.

String не просто набор Character это отдельный тип данных.

```javascript= 
var a: Character = "a"
var hello: String = "hello"
```
Если в переменную с типом Character записать больше 1 символа произойдет ошибка:
```javascript= 
var abc: Character = "abc"
```
Строки могут быть пустыми, не содержать значения, но в то же время быть инициализированными:
```javascript= 
var str1: String = ""
var str2: String = String()
```
В строках могут присутствовать спец. символы. Которые помогают при работе со строками.
Давайте рассмотрим основные из них:
```
\n: перевод на новую строку
\t: табуляция
\": кавычка
\\: обратный слеш
```
Рассмотрим пример в котором мы сделали перенос строки и экранировали кавычки:
```javascript= 
let text = "ООО \"Привет из будущего 777\" \n Директор: Иванов Иван Иванович"
print(text)
```
Начиная с версии языка Swift 4.0 многострочный текст обозначается """ и без использования переноса строки:
```javascript= 
let text = """
ООО "Привет из будущего 777"
Директор: Иванов Иван Иванович
"""
print(text)
```

## Логические значения (Bool) 

Тип Bool представляет логическое значение true (истина) или false (ложь). То есть объект Bool может находиться в двух состояниях:
```javascript= 
var isEnabled: Bool = true
isEnabled = false
```

Объекты типа Bool нередко являются результатом условных выражений, то есть таких выражений, которые представляют некоторое условие, и в зависимости от истинности условия возвращают true или false: true — если условие истинно и false — если условие ложно.

## Операции сравнения

Сравнивая значения мы получим либо истину либо ложь, следуя этому высказываю мы понимаем что результат сравнения это переменная типа Bool.

- ==
Операция равенства. Если левое и правое значение равны вернет true, иначе false:
```javascript=
var a = 20
var b = 20
var c = a == b
print(c)	// true, так как a равно b
var d = 8
c = a==d
print(c) // false, так как a не равно d
```

- !=
Операция неравенства. Если левое и правое значение не равны вернет true, иначе false:
```javascript=
var a = 20
var b = 20
var c = a != b
print(c)	// false, так как a равно b
var d = 8
c = a!=d
print(c) // true, так как a не равно d
```
- `>`
Если левое значение больше правого вернет true, иначе false
```javascript=
var a = 25
var b = 20
var c = a > b
print(c)	// true, так как a больше чем b
var d = 8
c = d > a
print(c) // false, так как d меньше чем a
```
- <
Если правое значение больше левого вернет true, иначе false:
```javascript=
var a = 25
var b = 20
var c = a < b
print(c)	// false, так как a больше чем b
var d = 8
c = d < a
print(c) // true, так как d меньше чем a
```
- '>='
Если левое значение больше либо равно правому вернет true, иначе false:
```javascript=
var a = 20
var b = 20
var c = a >= b
print(c)	// true, так как a равно b
var d = 8
c = d >= a
print(c) // false, так как d меньше чем a
```
- <=
Если правое значение больше либо равно левому вернет true, иначе false:
```javascript=
var a = 25
var b = 20
var c = a <= b
print(c)	// false, так как a больше чем b
var d = 9
c = d <= a
print(c) // true, так как d меньше a
```
## Логические операции

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

Данные операцию работают с переменными типа Bool и возвращают такую же переменную.
- !
Отрицание (НЕ). Меняет значение Bool переменной на обратное:
```javascript=
var isEnabled: Bool = true
var result = !isEnabled // false
```
- &&
Логическое Умножение (И). Если оба значения буду равны true тогда вернет true, иначе false:
```javascript=
let isEnabled: Bool = true
let isAlive = true
let result = isEnabled && isAlive   // true - так как оба операнда равны true
```
```javascript= 
let a: Bool = true
let b: Bool = false
let c: Bool = true
let d = a && b && c // false, так как b = false
```
- ||
Логическое сложение (ИЛИ). Если хотя бы одно значение равно true вернет true, иначе false:
```javascript=
var isEnabled: Bool = true
var isAlive = false
isEnabled || isAlive	// true, так как isEnabled равен true
```
```javascript=
var a: Bool = true
var b: Bool = false
var c: Bool = false
a || b || c // true, так как a = true
```

Так же логические операции можно объединить с операциями сравнения:
```javascript=
let a = 10
let b = 12
let c = a > 8 && b < 10
let d = a > 8 || b < 10
print(c)	// false
print(d)	// true
```

## Домашнее задание: 
1. Какого типа переменные подойдут для хранения следующей информации: 
Возраст человека Население города Число звезд в галактике 
Один байт ОЗУ Средняя зарплата за год Сведения спортсмен или нет 
Цвет фигуры Длина в мм. Длина в см. 
Фамилия человека Время года Пол человека 

2. Объявите и проинициализируйте переменные из п.1, дав им имена по смыслу. 
Выведите значения этих переменные в консоль в форме <Название: значение>, 
например : Возраст человека: 25.

3. Даны 3 переменных a, b, c - определяющие зарплату подчиненных на разных должностях (проинициализировать самим подходящими суммами). Через месяц зарплата первого выросла в 2 раза, зарплата второго выросла на 15000, заплата третьего осталась без изменения. Реализовать расчет новых сумм с помощью Арифметических операций с присваиванием. Вывести новые суммы в консоль каждую с новой строки.
4. Используя данные из задачи №.3 составить Операции сравнения и вывести в консоль результат выполнения (Все данные о разплате брать после повышения):
   - Зарплата первого больше зарплаты третьего
   - Зарплата второго меньше зарплаты первого 
   - Зарплата первого больше зарплаты второго ИЛИ зарплата третьего меньше зарплаты второго
   - Зарплата третьего меньше зарплаты первого И Зарплата второго больше зарплаты первого



