Поддерживает ли Swift функциональное программирование?

«Поддерживает ли Swift функциональное программирование?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, Swift поддерживает парадигму функционального программирования (ФП), являясь мультипарадигменным языком. Он предоставляет ключевые инструменты для написания кода в функциональном стиле.

Основные возможности ФП в Swift:

  • Функции как объекты первого класса: Функции и замыкания можно присваивать переменным, передавать как аргументы и возвращать из других функций.
  • Неизменяемость (Immutability): Ключевое слово let позволяет объявлять неизменяемые константы, что является важным принципом ФП.
  • Функции высшего порядка для коллекций:

    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
  • Замыкания (Closures): Анонимные функции для инлайн-вычислений.

Почему это не "чистый" ФП язык? Swift не обязывает писать исключительно в функциональном стиле. У него также есть:

  • Изменяемые переменные (var).
  • Классы и ссылочные типы.
  • Отсутствие встроенной оптимизации хвостовой рекурсии.

Вывод: Swift предоставляет мощные инструменты ФП, позволяя комбинировать их с объектно-ориентированным и протокольно-ориентированным подходами для наиболее эффективного решения задач.