Что такое функциональная парадигма программирования?

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

Ответ

Функциональная парадигма (ФП) — это стиль программирования, в котором программа рассматривается как вычисление математических функций, избегающее изменяемого состояния и побочных эффектов.

Основные принципы:

  1. Чистые функции (Pure Functions): Результат зависит только от входных аргументов. Нет побочных эффектов (изменения глобального состояния, ввод/вывод).
    // Чистая функция
    int add(int a, int b) {
        return a + b;
    }
  2. Неизменяемость (Immutability): Данные не изменяются после создания. Вместо модификации создаются новые структуры.
  3. Функции высшего порядка (Higher-Order Functions): Функции, которые могут принимать другие функции в качестве аргументов или возвращать их.
    // Функция высшего порядка 'map'
    List<Integer> result = numbers.stream()
                                  .map(x -> x * 2) // Принимает лямбда-функцию
                                  .toList();
  4. Декларативный стиль: Описывается что нужно сделать, а не как (в отличие от императивного стиля с циклами).

Пример на Java (использование Stream API):

import java.util.List;

List<Integer> numbers = List.of(1, 2, 3, 4);
// Декларативный стиль: "возьми числа, отфильтруй чётные, преобразуй в квадраты"
List<Integer> evenSquares = numbers.stream()
        .filter(n -> n % 2 == 0)     // Чистая функция-предикат
        .map(n -> n * n)             // Чистая функция-маппер
        .toList(); // Создаётся новый неизменяемый список
// evenSquares = [4, 16]

Java, начиная с версии 8, поддерживает элементы ФП через лямбда-выражения, Stream API и неизменяемые коллекции (List.of(), Map.copyOf()).