swift

Переменные и константы

Введение

Когда вы начинаете изучать программирование, первое, с чем вы сталкиваетесь — это переменные и константы.

Они являются основой любой программы, как фундамент для дома, как алфавит для языка.

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

📦 Переменные и константы

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

Поле – это и есть хранилище для данных (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 = "Санкт-Петербург"  // ❌ Ошибка! Константу нельзя изменить

💡 Почему в Swift есть и переменные, и константы?

Apple создала Swift с акцентом на безопасность. Использование констант помогает:

1. Предотвратить случайные ошибки

// ❌ Плохо - можно случайно изменить важные данные
var userID = "12345"
// ... много кода ...
userID = "67890"  // Ошибка! ID пользователя не должен меняться

// ✅ Хорошо - компилятор защитит от ошибки
let userID = "12345"
// userID = "67890"  // ❌ Ошибка компиляции

2. Сделать код понятнее

// Сразу видно, какие данные могут меняться, а какие нет
let firstName = "Анна"        // не изменится
let birthDate = "01.01.2000"  // не изменится
var age = 25                  // может измениться
var city = "Москва"           // может измениться

3. Оптимизировать производительность

Компилятор может лучше оптимизировать код с константами, зная, что их значения никогда не изменятся.

🔤 Правила именования полей

Можно использовать:

Нельзя использовать:

Примеры правильных имен:

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"       // Символ

Вывод типов (Type Inference)

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

🎯 Область видимости (Scope)

Переменные и константы существуют только в том блоке кода, где они объявлены:

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"   // ❌ Ошибка компиляции - защищены!

🎨 Именование в Swift (Best Practices)

Булевы переменные

Для булевых значений принято использовать префиксы 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 = "Кнопка"

🚨 Типичные ошибки новичков

1. Попытка изменить константу

let name = "Анна"
name = "Мария"  // ❌ Ошибка!

2. Использование неинициализированной переменной

var username
print(username)  // ❌ Ошибка! Не инициализирована

// ✅ Правильно
var username = ""
print(username)  // Пустая строка

3. Неправильный тип

var number = 5
number = "пять"  // ❌ Ошибка! Нельзя присвоить строку числу

var text = "hello"
text = 42  // ❌ Ошибка! Нельзя присвоить число строке

4. Игнорирование регистра букв

let userName = "Анна"
print(username)  // ❌ Ошибка! Разные имена (userName vs username)

// ✅ Правильно
print(userName)  // "Анна"

5. Использование var везде

// ❌ Плохо - все 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 = "Москва"

6. Забыли про тип при делении

let a = 5
let b = 2
let result = a / b  // 2 (целочисленное деление!)

// ✅ Правильно для дробного результата
let result2 = Double(a) / Double(b)  // 2.5

📊 Сравнение: var vs let

Характеристика var let
Можно изменить Да Нет
Безопасность Ниже Выше
Понятность кода Может меняться Не меняется
Производительность Стандартная Часто лучше
Когда использовать Данные изменяются Данные постоянны

🎉 Финальный совет

Помните: программирование — это практика.

Недостаточно просто прочитать статью, нужно писать код каждый день. Начните с малого:

  1. Создайте несколько переменных для описания себя
  2. Измените ваш возраст и пол
  3. Я уверен – название ваших переменных может быть лучше!

Решение можете присылать сюда

Удачи в изучении Swift! 🚀