Константы и переменные
Чему вы научитесь:
- объявлять константы через
letи переменные черезvarи выбирать между ними; - называть базовые типы Swift и задавать тип явно;
- переводить значение из одного типа в другой через
Int(…),Double(…)иString(…); - подставлять значения и выражения в строку через
\( ).

Представьте полку с коробками. На каждой коробке наклейка с именем, а внутри лежит значение: число, слово или ответ «да» либо «нет». По наклейке программа находит нужную коробку и заглядывает в неё.
Коробки бывают двух видов. Одну можно открыть, вынуть старое значение и положить новое. Другую запечатывают в тот момент, когда кладут в неё значение, и больше её не открыть. В Swift открытая коробка называется переменной, а запечатанная — константой.
Зачем программе коробки? Она запоминает значения, чтобы прочитать их на следующих строках: имя игрока, счёт, число попыток. Имя игрока за всю игру не меняется, а счёт растёт. Вот как это записывают в Swift:
let player = "Anna"
var score = 0
print(player, score) // Anna 0
score = 50
print(player, score) // Anna 50Давайте разберём программу по строкам:
let player = "Anna"заводит запечатанную коробкуplayerи кладёт в неё текст"Anna".var score = 0заводит открытую коробкуscoreс числом0.print(player, score)заглядывает в обе коробки и печатаетAnna 0.score = 50открывает коробкуscoreи кладёт в неё50вместо0.- Второй
printпечатаетAnna 50: имя то же, а счёт уже другой.
Два слова объявления
Объявить константу или переменную — значит завести для неё коробку с именем. Константу и переменную объявляют одинаково, отличается только первое слово. Строка var score = 0 состоит из четырёх частей:
var— какую коробку завести;score— имя на наклейке;=— знак, после которого идёт значение;0— начальное значение.
let — константа
Слово let по-английски значит «пусть»: строка let player = "Anna" читается как «пусть player будет "Anna"». Значение константы задают один раз, при объявлении. Читать её можно сколько угодно, а положить в неё что-то другое нельзя.
var — переменная
Слово var — начало английского слова, которое значит «переменная». Переменной можно задавать новые значения сколько угодно раз, пока работает программа.
Имена
Имена в Swift принято писать английскими словами. Первое слово начинается с маленькой буквы, а каждое следующее — с большой: score, maxScore, playerName.
Присваивание
Строка score = 50 — это присваивание: оно кладёт в переменную новое значение. Слова var в этой строке нет: коробка уже заведена, её только открывают.
Присваивание сначала вычисляет правую часть, а потом кладёт результат в коробку слева. Поэтому новое значение можно получить из старого:
score = score + 25
print(score) // 75- Swift читает из
scoreстарое значение50. - Прибавляет к нему
25и получает75. - Кладёт
75обратно вscore, а50пропадает.
Здесь картинка с коробками неточна. Если вынуть вещь из настоящей коробки, коробка опустеет. А чтение значения — в print(score) или в score + 25 — ничего не вынимает: после него в коробке лежит то же самое.
Нажмите «Следующий шаг» и следите за двумя коробками: score меняется на каждом присваивании, а bonus до конца программы хранит 10.
1let bonus = 102var score = 03print(score, bonus)4score = score + bonus5print(score, bonus)6score = score + bonus7print(score, bonus)8score = 09print(score, bonus)
Константа bonus запечатана с числом 10 до конца программы.
Сначала let
Swift-разработчики объявляют значения через let, а var пишут, только когда значение будет меняться. У этого правила две причины:
- читатель кода сразу видит, что значение не изменится, и не ищет строку, где его переписывают;
- компилятор следит за константой и находит случайное присваивание ей ещё до запуска программы.
Этот вопрос часто задают на собеседовании: «Чем let отличается от var?» Ответ состоит из двух частей:
letобъявляет константу: значение задают один раз, и присвоить новое нельзя;varобъявляет переменную: присваивание=может положить в неё новое значение.
Частая ошибка
Значение объявили через let, а потом попытались изменить:
let limit = 3
limit = 5 // ✗error: cannot assign to value: 'limit' is a 'let' constantКак вы уже знаете, компилятор проверяет весь файл до запуска, поэтому программа не напечатает ничего, даже строки выше ошибки. Рядом с ошибкой Swift сам подсказывает исправление: заменить let на var. Сделайте так, если значение должно меняться: var limit = 3.
Главное
letобъявляет константу: значение задают один раз, и изменить его нельзя.varобъявляет переменную, и присваивание=кладёт в неё новое значение.- Присваивание сначала вычисляет правую часть, поэтому
score = score + 25опирается на старое значение. - Объявляйте через
let, аvarпишите, когда значение будет меняться.