---
# System prepended metadata

title: 2.1. Знакомство со Swift в Playground. Переменные и константы.
tags: [' Talk', Templates]

---

---
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. Мы видим стартовое окно приложение с выбором запуска проекта и списком созданных проектов.
![](https://i.imgur.com/3Cw1cH5.png)
Нажимаем запуск - Get started with a playground.

Тип проекта выбираем - Blank:
![](https://i.imgur.com/0ZU7WPO.png)

Указываем имя проекта, в нашем случае это HelloSwift после нажмите кнопку Create:
![](https://i.imgur.com/SpydHjQ.png)

---

## Описание блоков playground (консоль, поле ввода кода, результат исполнения, статус бар)

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

Давайте рассмотрим основные блоки Playground:
![](https://i.imgur.com/onzj08k.png)
![](https://i.imgur.com/0tX8C8T.png)

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

---

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

Запишем в наше текстовое окно следующий простой код:

```javascript=
print("Hello world!")
```
`print()` — данный метод печатает выбранную строку в консоль. В нашем случае в консоль будет выведено “Hello world!”. Так же данная строка отобразится справа в окне вывода:

![](https://i.imgur.com/hCJKyA0.png)

Данный пример является очень простым, позднее мы часто будем работать со средой 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"
```
---

 ### Почему стиль написания носит именно такое название?
 
 
---

![](https://i.imgur.com/76SGz3g.png)

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

![](https://i.imgur.com/lU7Fe0p.png)

---

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

**Типы данных бывают строковые, числовые и логические.**

Ранее вы рассматривали пример:
```javascript=
var name: String
var count: Int
var isLoading: Bool
```

В нем есть все 3 типа данных. На этом занятии рассмотрим их подробнее.

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

Язык Swift является строго типизированным, что обеспечивает высокую безопасность приложений и защищает нас от незапланированных ошибок, которые могут привести к крашу приложения.


 Давайте рассмотрим основные типы данных используемые при написании кода.
 
 ---
 
 ## Числовые типы данных

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

---
Разница между Double и Float:

![](https://i.imgur.com/vYhfN0P.png)

Тип 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, то число четное):
![](https://i.imgur.com/OsgBnXW.png)

---

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

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

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

![](https://i.imgur.com/4dTmZiu.png)

---

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

- +=
```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 символа, произойдет ошибка:

![](https://i.imgur.com/fYbTiO1.png)


---

В строках могут присутствовать спец. символы, которые помогают при работе со строками.

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

Вот один из примеров:

![](https://i.imgur.com/Ywsg9HZ.jpg)

Начиная с версии языка 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 