0Pricing
Swift Academy · Урок

Функции как значения первого класса

Сохраняйте функции в переменных, передавайте их как аргументы и возвращайте из функций

«Функции как значения первого класса» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

В Swift функции являются полноправными объектами первого класса: их можно хранить в переменных, передавать как аргументы, возвращать из других функций и вкладывать в другие функции.

Типы функций

У каждой функции есть тип, определяемый типами её параметров и возвращаемого значения: ```swift func add(_ a: Int, _ b: Int) -> Int { a + b } let operation: (Int, Int) -> Int = add print(operation(3, 4)) // 7 ``` Тип `add` — `(Int, Int) -> Int`.

Передача функций как аргументов

```swift func apply(_ f: (Int) -> Int, to value: Int) -> Int { f(value) } func double(_ n: Int) -> Int { n * 2 } print(apply(double, to: 5)) // 10 ``` Это основа функций высшего порядка, таких как `map` и `filter`.

Возврат функций

```swift func multiplier(by factor: Int) -> (Int) -> Int { return { value in value * factor } } let triple = multiplier(by: 3) print(triple(7)) // 21 ``` Возврат функции создаёт *замыкание*, захватывающее `factor`.

Вложенные функции

Функции можно определять внутри других функций: ```swift func chooseStep(goForward: Bool) -> (Int) -> Int { func forward(_ n: Int) -> Int { n + 1 } func backward(_ n: Int) -> Int { n - 1 } return goForward ? forward : backward } let step = chooseStep(goForward: true) print(step(3)) // 4 ```

Замыкания как сокращённая запись

Анонимные литералы замыканий могут использоваться вместо любого типа функции: ```swift let square: (Int) -> Int = { $0 * $0 } print(square(6)) // 36 let doubled = [1, 2, 3].map { $0 * 2 } // [2, 4, 6] ``` `$0` обозначает первый аргумент в сокращённой форме записи замыкания.

Хранение функций в коллекциях

```swift let operations: [(Int, Int) -> Int] = [ { $0 + $1 }, { $0 - $1 }, { $0 * $1 } ] for op in operations { print(op(10, 3)) } // 13, 7, 30 ```

Синтаксис завершающего замыкания

Если последний аргумент является функцией, его можно записать за скобками: ```swift func withLogging(_ label: String, action: () -> Void) { print("Start: \(label)") action() print("End: \(label)") } withLogging("fetch") { fetchData() } ```

Идентичность и равенство функций

В Swift нельзя сравнивать два значения-функции с помощью `==`: функции не соответствуют протоколу Equatable: ```swift // let same = add == add ❌ ``` Если сравнение необходимо, оберните функцию в структуру или класс, соответствующие Equatable.

Шаблон каррирования

Сымитируйте каррирование, возвращая функции с частично применёнными аргументами: ```swift func add(_ a: Int) -> (Int) -> Int { { b in a + b } } let add5 = add(5) print(add5(3)) // 8 print(add5(10)) // 15 ``` Это удобно для создания специализированных функций из обобщённых.

Быстрая проверка

Какой тип функции у функции, принимающей два значения `Int` и возвращающей `Int`?

Итоги

Ключевые выводы: • Функции имеют такие типы, как `(ParamTypes) -> ReturnType` • Их можно хранить в переменных, передавать как аргументы и возвращать из функций • Замыкания (`{ }`) — это анонимные значения-функции • Синтаксис завершающего замыкания упрощает места вызова • Возврат функций из функций создаёт замыкания, захватывающие переменные Далее: урок об опциональной цепочке и извлечении значений.

Часто задаваемые вопросы

Урок «Функции как значения первого класса» бесплатный?

Да — полный текст урока «Функции как значения первого класса» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Функции как значения первого класса»?

Сохраняйте функции в переменных, передавайте их как аргументы и возвращайте из функций Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Функции как значения первого класса»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Метки аргументов и имена параметров
  2. Параметры по умолчанию и вариативные параметры
  3. Параметры inout и возврат нескольких значений
  4. Функции как значения первого класса
← Назад к Swift Academy