Что такое чистая функция (pure function)?

«Что такое чистая функция (pure function)?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Чистая функция — это функция, которая обладает двумя ключевыми свойствами:

  1. Детерминированность (Deterministic): Для одних и тех же входных аргументов всегда возвращает одинаковый результат.
  2. Отсутствие побочных эффектов (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).
  • Предсказуемость и надежность: Поведение функции изолировано и понятно.
  • Возможности для оптимизации: Кэширование результатов (мемоизация), параллельное выполнение.
  • Упрощение рассуждений о коде: Функцию можно анализировать и понимать в отрыве от контекста выполнения.

Чистые функции являются фундаментальной концепцией функционального программирования и крайне полезны даже в объектно-ориентированном коде для создания более стабильных и поддерживаемых модулей.

Видео-ответы