Ответ
Чистая функция — это функция, которая соответствует двум строгим правилам:
- Детерминизм: Для одних и тех же входных данных она всегда возвращает один и тот же результат.
- Отсутствие побочных эффектов (Side Effects): Она не изменяет какое-либо состояние вне своей области видимости (не меняет глобальные переменные, не пишет в файлы, не делает сетевые запросы и т.д.).
Ключевые преимущества:
- Предсказуемость и тестируемость: Легко писать юнит-тесты, так как для проверки достаточно сопоставить входные данные с ожидаемым результатом, не заботясь о внешнем состоянии.
- Надежность и отладка: Отсутствие скрытых зависимостей и побочных эффектов уменьшает количество ошибок и упрощает их поиск.
- Параллелизм: Чистые функции потокобезопасны по своей природе, так как они не работают с общим изменяемым состоянием.
- Кеширование (Мемоизация): Результаты выполнения можно безопасно кешировать, так как функция всегда вернет тот же результат для того же набора аргументов.
Пример:
# ✅ Чистая функция
# - Детерминирована: sum(2, 3) всегда вернет 5
# - Нет побочных эффектов: не изменяет ничего вне себя
def sum(a, b):
return a + b
# ❌ Нечистая функция
# - Недетерминирована: результат зависит от внешнего состояния (global_value)
# - Имеет побочный эффект: изменяет глобальную переменную
global_value = 10
def add_to_global(x):
global global_value
global_value += x
return global_value
Использование чистых функций является основой функционального программирования и приводит к созданию более надежного и поддерживаемого кода.