Ответ
Чистая функция — это функция, которая обладает двумя ключевыми свойствами:
- Детерминированность (Deterministic): Для одних и тех же входных аргументов всегда возвращает одинаковый результат.
- Отсутствие побочных эффектов (No Side Effects): Не изменяет внешнее состояние (глобальные переменные, параметры-ссылки, файловую систему, БД) и не зависит от изменяемого внешнего состояния.
Примеры:
// ЧИСТАЯ функция
public static int Add(int a, int b) => a + b;
public static string Greet(string name) => $"Hello, {name}!";
// НЕЧИСТАЯ функция (зависит от внешнего, изменяемого состояния)
private static int _counter = 0;
public static int GetNextId() => ++_counter; // Побочный эффект: изменяет _counter
// НЕЧИСТАЯ функция (результат недетерминирован)
public static int GetRandom() => new Random().Next(); // Разный результат при каждом вызове
// НЕЧИСТАЯ функция (выполняет ввод-вывод)
public static void Log(string message) => File.AppendAllText("log.txt", message);
Почему это важно? Преимущества чистых функций:
- Тестируемость: Легко проверить, не требуя сложной настройки окружения (mocks, stubs).
- Предсказуемость и надежность: Поведение функции изолировано и понятно.
- Возможности для оптимизации: Кэширование результатов (мемоизация), параллельное выполнение.
- Упрощение рассуждений о коде: Функцию можно анализировать и понимать в отрыве от контекста выполнения.
Чистые функции являются фундаментальной концепцией функционального программирования и крайне полезны даже в объектно-ориентированном коде для создания более стабильных и поддерживаемых модулей.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶