ГлавнаяБлогПараметры по умолчанию в Swift: как и зачем их использовать
Алгоритмы

Параметры по умолчанию в Swift: как и зачем их использовать

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

Al
Редакция Algolitalgolit.ru
5 мин чтения19 июня 2026 г.

Зачем нужны параметры по умолчанию в Swift?

Представь, что ты пишешь функцию для генератора тренировочных монтажей в стиле аниме 🥋:

func startTraining(student: String, intensity: String, withMusic: Bool) {
    print("\(student) начинает тренировку с интенсивностью \(intensity)!")
    if withMusic {
        print("🎵 Играет драматическая музыка 🎵")
    }
}

startTraining(student: "Naruto", intensity: "extreme", withMusic: true)

Теперь представь, что 90% твоих монтажей — с интенсивностью "extreme" и музыкой. Вызывать функцию с тремя параметрами каждый раз утомительно. Именно эту проблему решают параметры по умолчанию: пусть частый случай будет коротким, а редкий — всё ещё возможным.

func startTraining(student: String, intensity: String = "extreme", withMusic: Bool = true) {
    print("\(student) начинает тренировку с интенсивностью \(intensity)!")
    if withMusic {
        print("🎵 Играет драматическая музыка 🎵")
    }
}

startTraining(student: "Naruto")
startTraining(student: "Sakura", intensity: "moderate")
startTraining(student: "Rock Lee", intensity: "extreme", withMusic: false)

Все три вызова корректны. Первый использует оба значения по умолчанию, второй переопределяет только intensity, третий — оба дополнительных параметра. 🎉

Правило: параметры по умолчанию ставятся в конец

Swift не требует строго располагать параметры по умолчанию в конце, но это настоятельно рекомендуется. Вот почему:

func describeCharacter(name: String, power: String = "unknown", age: Int) {
    print("\(name) \(age) лет с силой \(power).")
}

describeCharacter(name: "Goku", age: 30)

Это компилируется, но вызов выглядит неловко. Когда смешиваются именованные и неименованные параметры, размещение значения по умолчанию в середине может привести к путанице. Принято ставить часто изменяемые параметры первыми, а редко изменяемые с умолчаниями — в конец.

func describeCharacter(name: String, age: Int, power: String = "unknown") {
    print("\(name) \(age) лет с силой \(power).")
}

describeCharacter(name: "Goku", age: 30)
describeCharacter(name: "Goku", age: 30, power: "Kamehameha")

Гораздо чище. ✨

Параметры по умолчанию в стандартной библиотеке Swift

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

Пример 1: removeAll(keepingCapacity:)

var characters = ["Lana", "Pam", "Ray", "Sterling"]
characters.removeAll()  // то же самое:
characters.removeAll(keepingCapacity: false)

keepingCapacity по умолчанию false, потому что чаще всего после очистки массива память больше не нужна. Но если ты собираешься заполнить его заново, removeAll(keepingCapacity: true) избегает лишнего перераспределения памяти.

Пример 2: Сравнение строк

let name = "naruto"
name.compare("Naruto")  // опции по умолчанию
name.compare("Naruto", options: .caseInsensitive)

compare(_:options:) имеет пустой набор опций по умолчанию, поэтому простой случай (регистрозависимое сравнение) не требует дополнительных аргументов, а регистронезависимое — всего один параметр.

Пример 3: Сам print()!

Ты всё это время пользовался параметрами по умолчанию, не осознавая этого:

print("Hello")
print("Hello", separator: " ", terminator: "\n")

print имеет значения по умолчанию для separator (пробел) и terminator (перевод строки). Вот почему print("a", "b", "c") выводит a b c с переносом строки в конце. А если переопределить terminator: "", можно выводить несколько сообщений на одной строке:

print("Loading", terminator: "")
print("...", terminator: "")
print("done!")
// Вывод: Loading...done!

Важный момент: значения по умолчанию ≠ опционалы

Легко спутать параметры по умолчанию с опционалами (Int?, String?), но они решают разные задачи:

  • Параметр по умолчанию — если вызывающий не указал значение, используется запасной. Внутри функции параметр никогда не nil — это всегда реальное значение.
  • Опционал — значение может действительно отсутствовать, и функция должна это обработать.
// Параметр по умолчанию — всегда реальное значение внутри функции
func greet(name: String = "friend") {
    print("Hello, \(name)!")
}

// Опционал — может быть nil, функция должна проверить
func greet(name: String?) {
    if let name = name {
        print("Hello, \(name)!")
    } else {
        print("Hello, friend!")
    }
}

Оба вызова greet() могут вывести «Hello, friend!», но достигают этого по-разному. Смешение этих концепций может привести к лишним проверкам if let, когда достаточно было бы параметра по умолчанию.

Практический вывод

Параметры по умолчанию — одна из тех возможностей, которые кажутся мелкими, но встречаются повсюду: и в твоём коде, и в стандартной библиотеке Swift. Главная идея проста: сделай частый случай простым, но оставь возможность для настройки.

Прямо сейчас открой свой проект и найди функцию, где ты передаёшь один и тот же аргумент в 90% вызовов. Сделай его параметром по умолчанию — и код станет чище. Попробуй!

#параметры по умолчанию#Swift#функции
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →
Параметры по умолчанию в Swift: как и зачем их использовать | Algolit