Когда вы начинаете изучать программирование, первое, с чем вы сталкиваетесь — это переменные и константы.
Они являются основой любой программы, как фундамент для дома, как алфавит для языка.
В этой статье мы подробно разберем, что такое переменные и константы, как с ними работать и почему это так важно, хотя и так просто.
Ваш код, должен хранить много данных, будь то возраст, имя или список товаров. Всё, что вы видите на экране вашего приложения – хранится в полях.
Поле – это и есть хранилище для данных (let name = "Sergio" / var age = 22)
Задача выбрать правильный формат хранения.
| Тип | Ключевое слово | Можно изменять | Пример |
|---|---|---|---|
| Переменная | var |
✅ Да | var age = 25 |
| Константа | let |
❌ Нет | let name = "Анна" |
Переменная — как следует из названия, её можно изменять. Константа — а вот она постоянна.
Дело в том, что новичкам бывает сложно определиться с тем, какой вариант выбрать.
Знаете, верным советом будет следующее – начните с let и как только вы попытаетесь поменять поле – xCode сам подскажет, что это поле должно стать var.
⚠️ Важно! Для начала пусть все ваши переменные будут
let, так точно не ошибётесь
var)Для создания переменной используется ключевое слово var:
var name = "Иван"
var age = 25
var temperature = 36.6
var score = 0
var isLoggedIn = true
let)Для создания константы используется ключевое слово let:
let birthYear = 1998
let pi = 3.14159
let planet = "Земля"
let appName = "Мое приложение"
let maxUsers = 1000
// Переменную можно менять
var username = "Иван"
username = "Петр" // username теперь – "Пётр" ✅
// Константу нельзя менять
let birthCity = "Москва"
birthCity = "Санкт-Петербург" // ❌ Ошибка! Константу нельзя изменить
Apple создала Swift с акцентом на безопасность. Использование констант помогает:
// ❌ Плохо - можно случайно изменить важные данные
var userID = "12345"
// ... много кода ...
userID = "67890" // Ошибка! ID пользователя не должен меняться
// ✅ Хорошо - компилятор защитит от ошибки
let userID = "12345"
// userID = "67890" // ❌ Ошибка компиляции
// Сразу видно, какие данные могут меняться, а какие нет
let firstName = "Анна" // не изменится
let birthDate = "01.01.2000" // не изменится
var age = 25 // может измениться
var city = "Москва" // может измениться
Компилятор может лучше оптимизировать код с константами, зная, что их значения никогда не изменятся.
class, func, var, let)let firstName = "Анна"
var userAge = 25
var isActive = true
⚠️ Важно! На первый взгляд, кажется, что именования полей, функций и классов это просто, но на самом деле это огромная и важная работа. Только по одним лишь названиям, можно отличить хорошего программиста от посредственного.
Об этом мы ещё поговорим, но уже в другом разделе.
В Swift принято использовать camelCase:
// ❌ Неправильно
let firstname
let FirstName
let first_name
// ✅ Правильно (camelCase)
let firstName
let userLastName
let isUserLoggedIn
let maximumNumberOfItems
Swift — строго типизированный язык. Это значит, что каждая переменная или константа имеет определенный тип, и этот тип меняться не может.
| Тип | Описание | Пример |
|---|---|---|
Int |
Целые числа | 42, -10, 0 |
Double |
Дробные числа | 3.14, -0.5 |
Bool |
Логические значения | true, false |
String |
Строки текста | “Привет” |
Character |
Один символ | “A”, “Б” |
var name: String = "Анна" // Строка
var age: Int = 25 // Целое число
var height: Double = 1.75 // Число с плавающей точкой
var isStudent: Bool = true // Логическое значение
var grade: Character = "A" // Символ
Swift умный (как и я) — часто можно не указывать тип явно, компилятор сам поймет:
let city = "Москва" // String
let population = 12_000_000 // Int (нижние подчеркивания для читаемости)
let pi = 3.14 // Double
let isAwesome = true // Bool
var number = 42
number = "сорок два" // ❌ Ошибка! Нельзя присвоить строку числовой переменной
var text = "Привет"
text = 123 // ❌ Ошибка! Нельзя присвоить число строковой переменной
Это защищает от ошибок и делает код надежнее.
var score = 0
// Простое присваивание
score = 10
print(score) // 10
// Использование текущего значения
score = score + 5
print(score) // 15
// Составные операторы
score += 3 // то же, что score = score + 3
print(score) // 18
score -= 5 // то же, что score = score - 5
print(score) // 13
score *= 2 // то же, что score = score * 2
print(score) // 26
score /= 13 // то же, что score = score / 13
print(score) // 2
let maxScore = 100
maxScore = 200 // ❌ Ошибка! Нельзя изменить константу
var greeting = "Привет"
var name = "Мир"
// Конкатенация
var message = greeting + ", " + name + "!" // "Привет, Мир!"
// Интерполяция
var age = 25
var introduction = "Меня зовут \(name), мне \(age) лет"
// "Меня зовут Мир, мне 25 лет"
// Многострочные строки
var poem = """
К тебе хочу прижаться близко
Вдохнуть весь жар твоей груди
В объятиях сомкнутся руки
Всем расстояниям вопреки
"""
// Свойства строк
var text = "Hello, Swift!"
text.count // 13 (длина строки)
text.isEmpty // false (проверка на пустоту)
text.uppercased() // "HELLO, SWIFT!"
text.lowercased() // "hello, swift!"
text.contains("Swift") // true
var isLoggedIn = true
var isCompleted = false
// Логические операции
var andOperation = isLoggedIn && isCompleted // false. Операция И
// оба поля должны быть true, а isCompleted у нас false – поэтому в итоге andOperation у нас `false`
var orOperation = isLoggedIn || isCompleted // true (ИЛИ - хотя бы один true должен быть true)
var notOperation = !true // false (Обратное значение для false - true и наоборот)
// Сравнение
var x = 5
var y = 10
var isGreater = x > y // false
var isLess = x < y // true
var isEqual = x == y // false
var isNotEqual = x != y // true
var isGreaterOrEqual = x >= y // false
var isLessOrEqual = x <= y // true
Переменные и константы существуют только в том блоке кода, где они объявлены:
func example() {
let localConstant = "Я видна только внутри функции"
var localVariable = 10
if true {
let innerConstant = "Я видна только внутри if"
var innerVariable = 20
print(localConstant) // ✅ Можно
print(innerConstant) // ✅ Можно
}
print(localConstant) // ✅ Можно
// print(innerConstant) // ❌ Ошибка! Не видна за пределами if
}
// print(localConstant) // ❌ Ошибка! Не видна за пределами функции
⚠️ Важно! Фигурные скобки – { и } это область внутри которой выполняются действия. Если вы определили поле внутри них – только внутри них оно и будет видно.
localConstantвидна внутри блокаif true {т.к. оно находится снаружи блокаif true, но вотinnerConstant, конечно, не будет видна снаружиif trueт.к. определена внутри блокаif trueКак толь вы начнёте практиковаться в коде – вы это уясните
Константы делают код безопаснее. Рассмотрим пример:
var для полей, которые не должны меняться)var userID = "12345"
var userEmail = "user@example.com"
var registrationDate = "2024-01-01"
var userName = "Иван"
// ... много кода ...
// Ошибка! Случайно изменили важные данные
userID = "54321" // ID не должен меняться!
userEmail = "hacker@evil.com" // Email не должен меняться!
let для неизменяемых данных)let userID = "12345"
let userEmail = "user@example.com"
let registrationDate = "2024-01-01"
var userName = "Иван"
var userAge = 25
// userName = "Петр" // ✅ Можно
// userAge = 26 // ✅ Можно
// userID = "54321" // ❌ Ошибка компиляции - защищены!
Для булевых значений принято использовать префиксы is, has, can, should:
var isLoggedIn = true
var hasAccess = false
var canEdit = true
var isEnabled = false
var shouldUpdate = true
var isCompleted = false
var hasData = true
// ❌ Плохо
var n = "Анна"
var a = 25
var b = true
var d = 3.14
var arr = [1, 2, 3]
// ✅ Хорошо
var firstName = "Анна"
var userAge = 25
var isStudent = true
var piValue = 3.14
var numbers = [1, 2, 3]
// ❌ Плохо
var usrNm = "Иван"
var addr = "ул. Ленина"
var calcRes = 42
var tmp = 36.6
var btn = "Кнопка"
// ✅ Хорошо
var username = "Иван"
var address = "ул. Ленина"
var calculationResult = 42
var temperature = 36.6
var buttonTitle = "Кнопка"
let name = "Анна"
name = "Мария" // ❌ Ошибка!
var username
print(username) // ❌ Ошибка! Не инициализирована
// ✅ Правильно
var username = ""
print(username) // Пустая строка
var number = 5
number = "пять" // ❌ Ошибка! Нельзя присвоить строку числу
var text = "hello"
text = 42 // ❌ Ошибка! Нельзя присвоить число строке
let userName = "Анна"
print(username) // ❌ Ошибка! Разные имена (userName vs username)
// ✅ Правильно
print(userName) // "Анна"
// ❌ Плохо - все var
var firstName = "Анна"
var lastName = "Иванова"
var birthYear = 1998
var age = 25
var city = "Москва"
// ✅ Хорошо - let для неизменяемых
let firstName = "Анна"
let lastName = "Иванова"
let birthYear = 1998
var age = 25
var city = "Москва"
let a = 5
let b = 2
let result = a / b // 2 (целочисленное деление!)
// ✅ Правильно для дробного результата
let result2 = Double(a) / Double(b) // 2.5
| Характеристика | var | let |
|---|---|---|
| Можно изменить | Да | Нет |
| Безопасность | Ниже | Выше |
| Понятность кода | Может меняться | Не меняется |
| Производительность | Стандартная | Часто лучше |
| Когда использовать | Данные изменяются | Данные постоянны |
Помните: программирование — это практика.
Недостаточно просто прочитать статью, нужно писать код каждый день. Начните с малого:
Решение можете присылать сюда
Удачи в изучении Swift! 🚀