Ответ
Чистая функция — это функция, которая:
- Детерминирована: Всегда возвращает один и тот же результат для одних и тех же входных аргументов.
- Не имеет побочных эффектов (side-effects): Не изменяет внешнее состояние (глобальные переменные, входные параметры, файловую систему, БД) и не зависит от него.
Примеры на Java:
// ✅ ЧИСТАЯ функция
public static int add(int a, int b) {
return a + b; // Результат зависит только от a и b, нет побочных эффектов.
}
// ✅ ЧИСТАЯ функция (работает с неизменяемыми объектами)
public static String greet(String name) {
return "Hello, " + name; // Создаётся новая строка, исходная не меняется.
}
// ❌ НЕЧИСТАЯ функция (побочный эффект - изменение внешней переменной)
private static int counter = 0;
public static int increment() {
return ++counter; // Результат разный при каждом вызове, меняет глобальное состояние.
}
// ❌ НЕЧИСТАЯ функция (побочный эффект - модификация входного параметра)
public static void clearList(List<String> list) {
list.clear(); // Изменяет переданный извне объект.
}
// ❌ НЕЧИСТАЯ функция (зависит от внешнего состояния - текущего времени)
public static long getCurrentTime() {
return System.currentTimeMillis(); // Результат всегда разный.
}
Преимущества чистых функций:
- Предсказуемость и надёжность: Легко рассуждать о поведении.
- Тестируемость: Не требуют сложной настройки окружения (mocks).
- Потокобезопасность: Отсутствие общего изменяемого состояния.
- Кэшируемость (мемоизация): Результат можно сохранить для повторного использования.
- Композируемость: Функции легко комбинировать в цепочки.
Чистые функции — фундаментальная концепция функционального программирования, применимая и в ООП для создания надёжного кода.