---
title: 2.1. Знакомство со Swift в Playground. Переменные и константы.
tags: Templates, Talk
description: View the slide with "Slide Mode".
---
# 2.1. Знакомство со Swift в Playground. Переменные и константы. Числовые и строковые типы.
# План занятия
1. Запуск Playground (Get started with a playground)
2. Описание блоков playground (консоль, поле ввода кода, результат исполнения, статус бар)
3. Структура программы
4. Переменные и константы
5. Типы данных
6. Числовые типы данных
7. Строковые типы данных
---
## Вспоминаем прошлые занятия
- Какой язык основной для iOS разработки?
- В какой среде разработки мы будем писать код?
---
## Запуск Playground (Get started with a playground)
Запуск Xcode. Мы видим стартовое окно приложение с выбором запуска проекта и списком созданных проектов.

Нажимаем запуск - Get started with a playground.
Тип проекта выбираем - Blank:

Указываем имя проекта, в нашем случае это HelloSwift после нажмите кнопку Create:

---
## Описание блоков playground (консоль, поле ввода кода, результат исполнения, статус бар)
После выбора типа вы увидите окно для работы (Playground). Окно напоминает любой текстовый редактор, в этом окне мы будем изучать базовые понятия языка Swift.
Давайте рассмотрим основные блоки Playground:


- Меню управление Xcode — стандартное меню любой программы на mac iOS;
- Текстовый редактор — поле для ввода исполняемого кода;
- Окно вывода — вывод выполнения функций, значения переменных в real-time;
- Status bar — идентификатор работы playground (загрузка, исполнение, готово);
- Show/Hide Debug Area — Показать/Скрыть консоль;
- Консоль — вывод результата работы программы при использовании консоли (Например: `print("Hello world!")`).
---
## Показ объявления переменных, заполнение данными, печать в консоль данных
Запишем в наше текстовое окно следующий простой код:
```javascript=
print("Hello world!")
```
`print()` — данный метод печатает выбранную строку в консоль. В нашем случае в консоль будет выведено “Hello world!”. Так же данная строка отобразится справа в окне вывода:

Данный пример является очень простым, позднее мы часто будем работать со средой Playground для изучения различных конструкций языка Swift.
___
## Структура программы на Swift
Программа состоит из множества команд, каждая из команд называется инструкцией (statement).
Например, мы с вами уже использовали данную инструкцию:
```javascript=
print("Hello world!")
```
Каждая инструкция пишется с новой строки:
```javascript=
print("hello world!")
print("welcome to swift")
```
Отметим, что Swift в целом имеет си-подобный синтаксис, то есть родственен таким языкам программирования как C, C++, C#, Java.
Язык Swift является С-подобным языком (C, C++, C#, Java), однако в таких языках каждая инструкция заканчивается знаком `;` в отличие от Swift. Однако мы можем это делать. Так же при написании нескольких инструкций в одну строку, например:
```javascript=
print("hello world!"); print("welcome to swift")
```
Структурные блоки в Swift обозначаются фигурными скобками. Например:
```javascript=
class Book { // начало блока класса
func print() { // начало блока функции
print("печать книги")
} // конец блока функции
} // конец блока класса
```
---
## Комментарии
Они предназначены для того, чтобы пояснять какую-нибудь сложную и непонятную часть вашей программы. Кроме того, иногда их используют, чтобы на время отключить какую-то часть кода.
Всё, что записано в комментарии, компилятор игнорирует. Если быть точнее, то к тому времени, как компилятор начнёт обрабатывать код программы, все комментарии будут уже удалены. Поэтому туда можно писать всё, что угодно.
В Swift можно определять комментарии к исходному коду.
Комментарии бывают однострочные и многострочные.
Многострочные имеют конструкцию /* Комментарий */:
```javascript=
/*
Первая программа на Swift
печать строки hello world
*/
print("hello world!")
```
Однострочные Комментарии начинаются со знака // (двойной слеш)::
```javascript=
print("hello world!") // печать строки hello world
print("welcome to swift") // печать строки welcome to swift
```
При комплиляции компилятор игнорирует комментарии. Они служат лишь для напоминамия программисту о моментах исходного кода.
---
## Переменные
Переменная — объект в программе для хранения значений.
Переменные в Swift объявляются с помощью ```var``` Например:
```javascript=
var name: String
var count: Int
var isLoading: Bool
```
В примере используются основные типы данных:
* Int — целое числовое значение;
* String — cтроковое значение, в котором хранятся символы;
* Bool — логический тип переменной, такая переменная может находится в двух вариантах true/false (Истина или ложь).
Так же переменные нужно инициализировать.
**Инициализация переменных** — это присвоение переменным конкретного значения. (Есть переменные, которые можно не инициализировать. Их называют опциональные переменные, мы их рассмотрим чуть позже).
```javascript=
var name: String = "Vadim"
var count: Int
var isLoading: Bool
init(count: Int, isLoading: Bool) {
self.count = count
self.isLoading = isLoading
}
```
Можно инициализировать сразу в момент объявления, либо присвоением значения в инициализаторе.
Давайте разберем работу переменных на примере задачи:
Даны два целочисленных числа A и B. Нужно поменять значения местами и вывести в консоль, чему равны наши переменные до замены и после.
```javascript=
var a: Int = 15 // Объявили и инициализировали переменную A
//c типом Int
var b = 32// Объявили и инициализировали переменную B
//c типом Int (Если у переменной неуказан тип, то Swift сам
// проверяет значение переменной и устанавливает ей тип)
// в данном случае переменная В имеет тип Int
print("До А = \(a)") // До А = 15
print("До B = \(b)") // До В = 32
// Чтобы поменять значения двух переменных местами,
// необходимо объявить вспомогательную переменную
// в нашем случае пусть это будет переменная c
var c = a // и присвоим ей значение переменной a
a = b // так как в памяти мы сохранили переменную a,
//мы переопределяем ее значение на b
b = c // значение переменной b присваиваем значанию, которое раньше было a.
//Выводим наши переменные в консоль
print("После А = \(a)") // После А = 32
print("После B = \(b)") // После B = 15
```
## Переменные и константы (var let)
Переменные и константы являются примитивами языка.
Примитив - это всякое явление, первоначальное, неразвитое, простое в сравнении с последующими явлениями того же рода.
- Бывают случаи, когда нам необходимо использовать одно и тоже число в своих расчетах (например, дата рождения).
- Бывают же случаи, когда значение постоянно меняется (вес, скорость).
Основное же отличие константы от переменной состоит в том, что присвоить значение ей и проинициализировать ее можно только один раз.
```javascript=
var coefficient = 12.7
// После чего мы можем изменить его
coefficient = 12.3
let pi = 3.14
```
Немаловажное значение имеет и именование констант и переменных. Лучше в начале пути приучить себя давать правильные название переменным и константам.
Стоит избегать однобуквенных или символьных названий, как например эти:
```javascript=
let 😄 = "Smile"
var c = 3
```
Применяйте стиль именования CamelCase:
```javascript=
let userName = "Ivan"
```
---
### Почему стиль написания носит именно такое название?
---

---
В случае, если мы попытаемся переопределить константу, то мы получим вот такую ошибку:

---
## Типы данных
**Типы данных бывают строковые, числовые и логические.**
Ранее вы рассматривали пример:
```javascript=
var name: String
var count: Int
var isLoading: Bool
```
В нем есть все 3 типа данных. На этом занятии рассмотрим их подробнее.
Типы данных в программировании используются для корректной работы с данными, т.е. различные операции над объектами могут выполняться только с одинаковыми типами данных.
Язык Swift является строго типизированным, что обеспечивает высокую безопасность приложений и защищает нас от незапланированных ошибок, которые могут привести к крашу приложения.
Давайте рассмотрим основные типы данных используемые при написании кода.
---
## Числовые типы данных
- Int - целое число;
- Double - 64-битное число с плавающей точкой, содержит до 15 чисел в дробной части;
- Float - 32-битное число с плавающей точкой, содержит до 6 чисел в дробной части.
---
Разница между Double и Float:

Тип Double получает более корректное отображение числа в отличие от Float:
```javascript=
var longitude: Double
```
В данном примере мы видим основное отличие между типами Double и Float. Отличие заключается в отображении числа и его дробной части. Однако при попытке ввода большого числа вроде 987654321,987654321 результат будет округлен до 987654321,9876543.
Большие и длинные числа мы можем указывать в коде следующим образом:
```javascript=
let starsCount = 2_000_000_000_000_000
```
> *Необходимо быть очень аккуратным при работе с числовыми типами данных, особенно при работе с приложениями, требующими высокой точности (например, при работе с банковским приложениями или медицинскими показаниями). В этом мы с вами далее убедимся.
> Более подробно об этом можно почитать здесь:
> https://losthuman.ru/categories/code/2018/10/07/swift-tipy-i-operatsii-chast-2.html
---
## Операции с числовыми данными
* Сложение `+`
```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
```
Например, так решаются задачи на вычисление четности числа (если остаток от деления на 2 равен 0, то число четное):

---
## Арифметические операции с присваиванием
Мы уже с вами знаем, что любые действия с переменными можно делать, если они одного типа данных. Так же работайте и с арифметическими операциями.
Если мы не будем соблюдать это правило, то получим ошибку:

---
Есть арифметические операции, которые выполняются с присваиванием:
- +=
```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 символа, произойдет ошибка:

---
В строках могут присутствовать спец. символы, которые помогают при работе со строками.
Давайте рассмотрим основные из них:
```
\n: перевод на новую строку
\t: табуляция
\": кавычка
\\: обратный слеш
```
Вот один из примеров:

Начиная с версии языка Swift 4.0, многострочный текст обозначается ``"""`` и без использования переноса строки.
Однако такая разметка текста часто используется.
---
### Итоги:
- Создали первую программу на Swift
- Узнали о структуре программы
- Научились инициализировать переменные и константы.
- Получили знания о том, как не стоит именовать переменные, и какой стиль принят в iOS разработке
- Узнали, что такое числовые и строковые типы данных, и какие операции с ними можно совершить
---
## Домашнее задание:
### Задача №1
#### Подумайте, какого типа переменные подойдут для хранения следующей информации:
- Возраст человека
- Население города
- Число звезд в галактике
- Один байт ОЗУ
- Средняя зарплата за год
- Цвет фигуры
- Длина в мм.
- Длина в см.
- Фамилия человека
- Время года
- Пол человека
### Задача №2
- Объявите и проинициализируйте переменные из Задачи №1, дав им имена по смыслу.
- Выведите значения этих переменные в консоль в форме <Название: значение>, например : Возраст человека: 25.
### Задача №3
- Даны 3 переменных a, b, c - определяющие зарплату подчиненных на разных должностях (проинициализировать самим подходящими суммами). Через месяц зарплата первого выросла в 2 раза, зарплата второго выросла на 15000, заплата третьего осталась без изменения. Реализовать расчет новых сумм с помощью арифметических операций с присваиванием. Вывести новые суммы в консоль каждую с новой строки.
### Готовый файл формата .playground заархивируйте и загрузите в личном кабинете в формате .zip
В презентации ссылка: https://github.com/netology-code/bios-homeworks/blob/master/2.1/README.md