Ответ
Функциональная парадигма (ФП) — это стиль программирования, в котором программа рассматривается как вычисление математических функций, избегающее изменяемого состояния и побочных эффектов.
Основные принципы:
- Чистые функции (Pure Functions): Результат зависит только от входных аргументов. Нет побочных эффектов (изменения глобального состояния, ввод/вывод).
// Чистая функция int add(int a, int b) { return a + b; } - Неизменяемость (Immutability): Данные не изменяются после создания. Вместо модификации создаются новые структуры.
- Функции высшего порядка (Higher-Order Functions): Функции, которые могут принимать другие функции в качестве аргументов или возвращать их.
// Функция высшего порядка 'map' List<Integer> result = numbers.stream() .map(x -> x * 2) // Принимает лямбда-функцию .toList(); - Декларативный стиль: Описывается что нужно сделать, а не как (в отличие от императивного стиля с циклами).
Пример на 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()).
Ответ 18+ 🔞
А, слушай, смотри, вот эта ваша функциональная парадигма — это, блядь, как будто ты пришёл на кухню, а там всё идеально чисто, и тебе говорят: «Готовь, но ничего не пачкай, сука, и не трогай глобальный холодильник!». Ёпта, звучит как издевательство, но, оказывается, работать может.
Основные закидоны этой философии:
-
Чистые функции, ёбта. Это святое. Функция как математик-отшельник: дали ей два числа — она тебе сумму и выдала. Больше нихуя. Ни в какой глобальный счётчик не плюнула, в консоль не нагадила, соседний массив не переписала. Как автомат по продаже газировки: кинул монету — получил банку. И всё.
// Вот это чистота, блядь. Ангельская. int add(int a, int b) { return a + b; // Взял a, взял b, сделал дело — гуляй смело. } -
Неизменяемость, или «Руки прочь от моих данных!» Создал список — и всё, он теперь музейный экспонат. Хочешь что-то поменять? Создавай новый список, старый трогать низя. Да, памяти жрёт, как не в себя, но зато никаких сюрпризов, когда в десятом потоке тебе кто-то массив нахуй перетерли.
-
Функции высшего порядка. Это когда функции такие понтовые, что могут других функций принимать, как аргументы, или даже рожать их на выходе. Типа главный инженер, который не сам паяет, а раздаёт задания.
// Смотри, 'map' — он высшего порядка, царь и бог. Ему дали список и сказали: «Примени вот эту штуку (x -> x * 2) к каждому элементу». List<Integer> result = numbers.stream() .map(x -> x * 2) // Лямбда — это и есть та самая «другая функция», которую передали. .toList(); -
Декларативный стиль. Вместо того чтобы орать: «Вася, возьми ящик, открой его, достань по одному кирпичу, проверь на чётность, если чётный — возведи в квадрат и положи в другую кучу!» — ты просто говоришь: «Мне нужны квадраты чётных чисел из этого ящика». И всё. Как заказал пиццу по телефону — тебе не объясняют, как повар тесто раскатывает.
Пример на Java, который всех задолбает своей правильностью:
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(); // И собрали в НОВЫЙ, блядь, список. Старый 'numbers' лежит нетронутый, святой дух.
// evenSquares = [4, 16]. Всё, пиздец, приехали.
Java, особенно после восьмой версии, эту моду подхватила. Лямбды (->), Stream API, эти все List.of() — это её попытки быть молодой и функциональной, хотя внутри она всё та же, сука, объектно-ориентированная тётя с кучей побочных эффектов. Но старается, блядь, старается.