Зачем их любят
Предсказуемость — результат определяется только входом.
Простое тестирование — без моков окружения для чистой логики.
Мемоизация — можно безопасно кэшировать f(x).
Параллелизм / рассуждение о коде — меньше скрытых зависимостей.
Проще рефакторить — меньше сюрпризов от глобального состояния.
Композиция — чистые функции удобно склеивать в пайплайны.
Практика
const calcTotal = (items ) =>
items.reduce ((sum, i ) => sum + i.price * i.qty , 0 );
function checkout (items ) {
const total = calcTotal (items);
return fetch ("/api/pay" , {
method : "POST" ,
body : JSON .stringify ({ total }),
});
}
Оговорка для собеседования
Не всё должно быть чистым: UI, сеть, БД — эффекты. Цель — изолировать нечистую оболочку и держать чистым ядро. Чистая функция ≠ «быстрая»; иногда копирование данных вместо мутации стоит дороже.