Ответ
Функция в Swift — это самодостаточный блок кода, выполняющий конкретную задачу. Она объявляется ключевым словом func, может принимать входные параметры, выполнять операции и возвращать результат.
Базовый синтаксис:
func имяФункции(параметр1: Тип, параметр2: Тип) -> ВозвращаемыйТип {
// Тело функции
return значение
}
Расширенный пример с ключевыми возможностями Swift:
// Функция с внешним/внутренним именами, значением по умолчанию и меткой опускания
func calculateArea(for width: Double, and height: Double = 10.0) -> Double {
return width * height
}
let area1 = calculateArea(for: 5.0, and: 8.0) // 40.0
let area2 = calculateArea(for: 5.0) // 50.0 (height = 10.0 по умолчанию)
// Функция, возвращающая кортеж (множество значений)
func minMax(of array: [Int]) -> (min: Int, max: Int)? {
guard !array.isEmpty else { return nil }
return (array.min()!, array.max()!)
}
// Функция как объект первого класса (first-class citizen)
let operation: (Double, Double) -> Double = calculateArea
let result = operation(3.0, 4.0) // 12.0
Важные особенности функций в Swift:
- Параметры: Могут иметь как внутренние (для использования в теле), так и внешние (для вызова) имена. Используется
_для опускания внешнего имени. - Возвращаемое значение: Может отсутствовать (
-> Void), быть одним значением, кортежем или опциональным типом. - Функции как типы: Функции можно присваивать переменным, передавать как аргументы в другие функции (колбеки) и возвращать из функций (замыкания высшего порядка).
- Способы передачи параметров:
inout— для сквозных параметров, изменяющих переданную переменную.- По умолчанию — все параметры являются константами (
let). Для изменения создается локальная копия.
Ответ 18+ 🔞
А, функции в Swift? Ну, это ж как инструкция для компуктера, только на человеческом почти языке. Представь, что ты командир, а функция — это твой самый дисциплинированный солдат, который по первому зову «Иди сюда, сука!» выполняет задачу и либо молча делает своё дело, либо докладывает результат.
Вот смотри, как это выглядит, этот самый базовый устав:
func имяФункции(параметр1: Тип, параметр2: Тип) -> ВозвращаемыйТип {
// Тело функции
return значение
}
Видишь func? Это как кличка для пса. Крикнул — он уже тут. А дальше начинается магия, потому что свифт — он хитрожопый, он любит, чтобы всё было красиво и понятно.
Вот тебе пример посерьёзнее, чтобы прочувствовать весь этот ёперный театр:
// Функция с внешним/внутренним именами, значением по умолчанию и меткой опускания
func calculateArea(for width: Double, and height: Double = 10.0) -> Double {
return width * height
}
let area1 = calculateArea(for: 5.0, and: 8.0) // 40.0
let area2 = calculateArea(for: 5.0) // 50.0 (height = 10.0 по умолчанию)
Смотри, какая красота! Когда вызываешь, пишешь for width и and height — это как будто вежливо разговариваешь с кодом: «Рассчитай-ка площадь ДЛЯ ширины 5.0 И высоты 8.0». А если высоту не указал — он сам подставляет дефолтную, 10.0. Удобно, блядь! Не нужно каждый раз городить овердохуищу параметров.
А вот это вообще пиздец как круто — функция может вернуть тебе сразу два значения, завернутые в один кортеж, как котлеты в лаваш:
// Функция, возвращающая кортеж (множество значений)
func minMax(of array: [Int]) -> (min: Int, max: Int)? {
guard !array.isEmpty else { return nil }
return (array.min()!, array.max()!)
}
Спрашивается: «Эй, функция, найди мне минимум и максимум В ЭТОМ массиве». А она тебе: «На, мудак, держи оба значения разом, и ещё на случай пустого массива опциональку подсуну, чтобы не вылетело». Хитро, да?
Но самый сок в том, что функции в Swift — это объекты первого класса, или, как я это называю, «полноправные граждане кода». Их можно, как переменные, тыкать куда угодно:
// Функция как объект первого класса (first-class citizen)
let operation: (Double, Double) -> Double = calculateArea
let result = operation(3.0, 4.0) // 12.0
Вот это даёшь, operation — это теперь не просто слово, а полноценная ссылка на ту самую calculateArea. Прикол? Прикол. Можно передавать эту штуку в другие функции (это колбеки, ёпта) или вообще получать функции как результат (замыкания высшего порядка, мать их). Голова кругом, но это мощно.
Короче, запомни главное:
- Параметры — можно называть их для внешнего мира и для внутреннего пользования по-разному. Поставил
_— и внешнее имя вообще хуй с горы, вызывай сразу по значению. - Возврат — может быть чем угодно: пустотой (
Void), одним значением, парой значений или даже опциональным «а есть ли что-то вообще?». - Функции как типы — это не просто команды, это полноценные сущности, которые можно пинать по коду туда-сюда. Гибкость — пиздец!
- Передача параметров — по умолчанию они все
let, константы. Хочешь изменить исходную переменную? Вешай на неё биркуinoutи прогоняй через функцию, как через мясорубку. Но осторожно, а то сам себя ебнешь.
Вот и вся наука. Сначала кажется, что нихуя не понятно, а потом врубаешься и такой: «Да бля, так это же удобно!». Главное — начать использовать, а там и привыкнешь.