Что такое функция высшего порядка (higher-order function)?

«Что такое функция высшего порядка (higher-order function)?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Функция высшего порядка — это функция, которая соответствует одному или двум условиям:

  1. Принимает одну или несколько функций (замыканий) в качестве аргументов.
  2. Возвращает функцию в качестве результата.

Это ключевая концепция функционального программирования, позволяющая создавать гибкие и переиспользуемые абстракции.

Примеры встроенных функций высшего порядка в Swift (для коллекций):

let numbers = [1, 2, 3, 4, 5]

// map — принимает функцию преобразования, возвращает новый массив.
let squared = numbers.map { $0 * $0 } // [1, 4, 9, 16, 25]

// filter — принимает функцию-предикат, возвращает отфильтрованный массив.
let evens = numbers.filter { $0 % 2 == 0 } // [2, 4]

// reduce — принимает начальное значение и функцию-комбинатор.
let sum = numbers.reduce(0, +) // 15

Пример кастомной функции высшего порядка:

// Функция, которая применяет другую функцию дважды.
func applyTwice(_ transform: (Int) -> Int, to value: Int) -> Int {
    return transform(transform(value))
}

let double = { $0 * 2 }
let result = applyTwice(double, to: 5) // 20 (5 * 2 * 2)

Пример функции, возвращающей функцию:

// Функция создает и возвращает функцию-приветствие.
func greeter(for name: String) -> () -> String {
    return { "Hello, (name)!" }
}

let greetAlice = greeter(for: "Alice")
print(greetAlice()) // "Hello, Alice!"

Преимущества: повышение уровня абстракции, устранение дублирования кода, удобство работы с асинхронными операциями (например, completion handlers).