Урок 3. Операторы в Swift

1 Ноября 2022

Давайте начнем с самых простых операторов, которые вам точно знакомы.

Арифметические операторы

1. +

2.

3. *

4. /

5. %

В школе на уроке математики вы все с ними сталкивались, кроме последнего, но об этом чуть позже. 

Как мы их можем применить в программировании?

Создадим пару переменных с целочисленными значениями:

				
					var quantityOfGoods = 20
var unitPrice = 500
				
			

Представим что наше приложение должно рассчитывать общую сумму купленных нами товаров за неделю. У нас есть количество товаров quantityOfGoods и цена за единицу товара unitPrice.

Теперь нам нужно посчитать общую сумму. Мы можем написать следующим образом:

				
					var quantityOfGoods = 20
var unitPrice = 500

quantityOfGoods * unitPrice
				
			


Мы действительно получили результат, но этот результат мы нигде в коде использовать не сможем, потому что мы его не сохранили в памяти. Например мы каждую неделю ходили в магазин и в конце месяца хотим проверить, сколько мы потратили на продукты:
				
					// Первая неделя

var quantityOfGoods = 20
var unitPrice = 500

quantityOfGoods * unitPrice

// Вторая неделя

quantityOfGoods = 22
unitPrice = 400

quantityOfGoods * unitPrice

// Третья неделя

quantityOfGoods = 33
unitPrice = 300

quantityOfGoods * unitPrice

// Четвертая неделя

quantityOfGoods = 10
unitPrice = 700

quantityOfGoods * unitPrice
				
			

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

Хорошо. Но если нам теперь понадобится рассчитать какую общую сумму мы потратили за месяц. Данных о промежуточных рассчетов у нас нет, мы их никуда не сохранили. Давайте это исправим:
				
					//Первая неделя

var quantityOfGoods = 20
var unitPrice = 500

let totalForFirstWeek = quantityOfGoods * unitPrice

// Вторая неделя

quantityOfGoods = 22
unitPrice = 400

let totalForSecondWeek = quantityOfGoods * unitPrice

//Третья неделя

quantityOfGoods = 33
unitPrice = 300

let totalForThirdWeek = quantityOfGoods * unitPrice

// Четвертая неделя

quantityOfGoods = 10
unitPrice = 700

let totalForFourthWeek = quantityOfGoods * unitPrice
				
			
Таким образом мы сохранили промежуточные расчеты в свойствах, которыми мы можем воспользоваться для поиска общих затрат за месяц:
				
					//Первая неделя

var quantityOfGoods = 20
var unitPrice = 500

let totalForFirstWeek = quantityOfGoods * unitPrice

// Вторая неделя

quantityOfGoods = 22
unitPrice = 400

let totalForSecondWeek = quantityOfGoods * unitPrice

// Третья неделя

quantityOfGoods = 33
unitPrice = 300

let totalForThirdWeek = quantityOfGoods * unitPrice

// Четвертая неделя

quantityOfGoods = 10
unitPrice = 700

let totalForFourthWeek = quantityOfGoods * unitPrice

// Общий результат за месяц

let total = totalForFirstWeek + totalForSecondWeek + totalForThirdWeek + totalForFourthWeek
				
			
Обратите внимание, что я делаю логические отступы, это очень важно! Писать код, это тоже самое что писать книгу, нужно везде делать логические отступы. Закончили мысль, поставили отступ (не больше одного).
Думаю вы уловили суть и сможете с легкостью применить остальные арифметические операторы. 

Кроме этих стандартных операторов существует еще один интересный оператор, который не встречается в математике. Это оператор остатка от деления. Он выглядит как проценты %. Давайте рассмотрим, как он работает на примере следующего выражения:

Для начала определим сколько троек входит в цифру 7:

Всё что не влезет в это значение и будет остатком. Давайте теперь найдем остаток от деления восьми на 3, что бы окончательно понять суть: 

Определяем сколько троек вместится в восьмерку:

Таким образом, если мы будем находит остаток от деления девяти на три, то мы получим 0, потому что в девятке помещается три тройки без остатка. 

Обычно этот оператор используют для нахождения четности числа. Давайте проверим является ли наше свойство total четным:

				
					let total = totalForFirstWeek + totalForSecondWeek
+ totalForThirdWeek + totalForFourthWeek

let remainder = total % 2
				
			
Если наше свойство делится на два без остатка то значит оно четное, давайте запустим компилятор и проверим результат:

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

В Swift оператор остатка от деления работает как с положительными, так и с отрицательными числами. В том случае если total будет отрицательное, то остаток так же будет отрицательным, а если будет отрицательная двойка, то результат будет положительным. То есть выражение total % 2 и total % – 2, всегда будут выдавать одинаковый результат

Если делитель меньше делимого то вернется сам делитель:

В дальнейшем мы посмотрим как это можно использовать на практике.

Составные операторы присваивания

С оператором присваивания вы уже знакомы, и выглядит он как математический знак равно (=). Но не нужно его путать с математическим равно. 

В отличии от математики, где этот оператор говорит о равенстве величин или выражает результат каких либо операций над величинами, в Swift этот оператор именно присваивает значение одного свойства другому.

Обратимся к примеру:

				
					let numberOne = 4
var numberTwo = 6

numberTwo = numberOne
				
			

Это не значит, что numberTwo равно numberOne, это значит, что мы присваиваем значение numberOne для numberTwo. По факту мы переопределили, то есть изменили, значение у свойства numberTwo и оно теперь равно 4:

Теперь что же такое составные операторы присвоения? Давайте снова обратимся к примеру:
				
					let numberOne = 4
var numberTwo = 6

numberTwo = numberOne
numberTwo = numberTwo + numberOne
				
			

Свойство numberTwo мы увеличиваем на значение numberOne, и такую запись можно сделать короче:

				
					let numberOne = 4
var numberTwo = 6

numberTwo = numberOne
numberTwo += numberOne
				
			
Таким образом вы можете сократить любое из арифметических выражений, которое предполагает либо увеличение либо уменьшение начального значения свойства:
				
					numberTwo = numberOne
numberTwo += numberOne

numberTwo = numberTwo * numberOne
numberTwo *= numberOne

numberTwo = numberTwo / numberOne
numberTwo /= numberOne

numberTwo = numberTwo - numberOne
numberTwo -= numberOne
				
			
Давайте распишем каждый шаг:


Свойство numberTwo в каждом вычислении принимает новое значение.

Лучше всегда отдавать предпочтение сокращенной версии записи, иначе запись a = a + b будет выдавать в вас дилетанта. 

Операторы сравнения

Некоторые операторы вам так же знакомы из математики:

1. >

2. <

3. >=

4. <=

5. == 

6. !=

Операторы сравнения всегда возвращают true или false в зависимости от результата сравнения. Если результат сравнения верный, то возвращается значение true, иначе — false.

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

				
					numberOne
numberTwo

numberOne > numberTwo
numberOne < numberTwo
numberOne >= numberTwo
numberOne <= numberTwo
numberOne == numberTwo
numberOne != numberTwo
				
			

Первые две строчки, нам нужны что бы посмотреть результат после всех наших вычислений выше numberOne = 4 и numberTwo тоже 4

Далее мы их сравниваем. И результатом этих сравнений будет либо true либо false, давайте запустим компилятор:

Думаю стоит остановится на последних двух выражениях. Двойное равно можно соотнести с математическим равно, то есть проверка на равенство, и в том случае если значения равны, то нам возвращается true. Что же касается знака !=, то это проверка на не равенство, и если значения не равны, то возвращается true, в нашем случае у нас две четверки, поэтому вернулось false

Вы можете заметить что я сказала о возврате какого то значения, и действительно, все что мы видим  справа это значения которые мы можем сохранить в памяти. соответсвенно, мы с вами можем результат наших выражений положить в свойства и потом где нибудь в коде использовать этот результат:

				
					let firstProperty = numberOne > numberTwo
let secondProperty = numberOne < numberTwo
let thirdProperty = numberOne >= numberTwo

numberOne <= numberTwo
numberOne == numberTwo
numberOne != numberTwo
				
			

И так результат каждого выражения мы можем положить в какое либо свойство, в нашем случае мы положили в константу, потому что не планируем менять это значение.

Давайте посмотрим на тип данных этих свойств:

Они являются логическими свойствами, потому что выражение возвращает логическое значение.

Логические операторы

Swift поддерживает три стандартных логических оператора:

1. ! – Логическое HE

2. && – Логическое И

3. || – Логическое ИЛИ

Давайте каждый из операторов рассмотрим на примере:

У нас есть свойство firstProperty, которое содержит в себе значение false, но бывают случаи, о которых мы будем разговаривать на следующих уроках, когда нам нужно изменить это значение на противоположное. Для этого нам достаточно поставить оператор НЕ перед данным свойством:

В таком случае наше свойство будет возвращать значение true, то есть мы как бы говорим НЕ false

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

То что мы применили к свойству оператор ! не меняет его фактически:

Оно как было false так им и осталось.

Следующий оператор который мы рассмотрим это логическое И

Оператор логического И (&&) записывается между двух операндов, грубо говоря между двух логических выражений:

				
					!firstProperty
firstProperty && secondProperty
				
			
Или так:
				
					!firstProperty
firstProperty && secondProperty
numberOne <= numberTwo && numberOne == numberTwo
				
			

То есть слева и справа должно быть какое то логическое выражение. И выражение с использованием логического && возвращает true только в том случае если оба операнда возвращают true:

Проведем аналогию. Что бы получить права тебе нужно сдать и теорию И практику, без одного их этих условий не получится получить документы. То есть всегда должно выполнятся два условия, иначе вернется false. 

Ну и последний оператор на сегодня логическое ИЛИ. Записывается так же как и логическое И между двух операндов и обозначается как две вертикальные черты: || 

				
					!firstProperty
firstProperty && secondProperty
numberOne <= numberTwo && numberOne == numberTwo
secondProperty || thirdProperty
firstProperty || numberOne != numberTwo
				
			

Выражение с использованием логического || возвращает true в том случае если хотя бы один из операндов возвращает true:

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

Обратите внимание на синтаксис, перед оператором и после мы ставим пробел, строка вида numberOne+numberTwo будет считаться ошибкой. 

Если мы запустим компилятор, то справа мы увидим нашу общую сумму:

Поддержите наш проект, и помогите изменить подход к обучению!

Развивайся вместе с нами

Поддержите наш проект, и помогите изменить подход к обучению!

Address List

Social Networks

Поддержите наш проект, и помогите изменить подход к обучению!