Урок 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
				
			
Давайте распишем каждый шаг: