Java for Beginner
675 subscribers
560 photos
156 videos
12 files
858 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Продолжаем серию постов для углубления недостаточно рассмотренных и актуальных тем.

Функциональное программирование

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

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


Основные принципы функционального программирования

Неизменяемость (Immutability):
В ФП данные не изменяются после создания. Вместо этого создаются новые данные на основе существующих.

Преимущества:
Упрощение отладки и тестирования.
Потокобезопасность (нет состояния, которое может быть изменено несколькими потоками).


Недостатки:
Может потреблять больше памяти, так как создаются новые объекты вместо изменения существующих.

Пример:
// Императивный стиль (изменяемый)
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Kotlin");

// Функциональный стиль (неизменяемый)
List<String> immutableList = List.of("Java", "Kotlin");


Чистые функции (Pure Functions):

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

Преимущества:
Предсказуемость и простота тестирования.
Упрощение параллельного выполнения.


Недостатки:
Иногда сложно избежать побочных эффектов в реальных приложениях.

Пример:
// Чистая функция
public static int add(int a, int b) {
return a + b;
}

// Нечистая функция (имеет побочный эффект)
public static int addAndLog(int a, int b) {
System.out.println("Adding " + a + " and " + b); // Побочный эффект
return a + b;
}


Функции высшего порядка (Higher-Order Functions):

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

Преимущества:
Гибкость и возможность создания абстракций.

Недостатки:
Может быть сложнее для понимания новичкам.

Пример:
// Функция высшего порядка
public static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
List<T> result = new ArrayList<>();
for (T item : list) {
if (predicate.test(item)) {
result.add(item);
}
}
return result;
}

// Использование
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
List<Integer> evenNumbers = filter(numbers, n -> n % 2 == 0); // [2, 4]


Полезная для понимания вопроса, статья - https://habr.com/ru/articles/570642/

#Java #Training #Medium #Functional_programming