Побочные эффекты
Любое взаимодействие функции с внешним миром помимо возврата значения.
Зачем нужно
Понимание side effects — ключ к предсказуемому коду. Чистые функции без побочных эффектов легче тестировать, кэшировать и отлаживать. Эффекты нужно изолировать.
Где используется
- Архитектура приложений (разделение логики и IO)
- Тестирование (мокирование эффектов)
- Функциональные фреймворки (Redux, Elm)
Code
// Побочные эффекты — примеры:
// 1. Мутация внешней переменной
let count = 0;
function increment() { count++; } // side effect!
// 2. Запись в DOM
function render(text) { document.body.innerHTML = text; }
// 3. HTTP-запрос
async function saveUser(user) { await fetch('/api', { body: user }); }
// 4. console.log
function add(a, b) { console.log(a + b); return a + b; } // side effect
// Без побочных эффектов (чистая)
function pureAdd(a, b) { return a + b; }
// Изоляция эффектов: эффект снаружи, логика внутри
// Плохо:
function processAndSave(data) {
const result = transform(data); // логика
fs.writeFileSync('out.json()', JSON.stringify(result)); // эффект
}
// Хорошо:
function process(data) { return transform(data); } // чистая
const result = process(data);
fs.writeFileSync('out.json()', JSON.stringify(result)); // эффект отдельно
// React: useEffect — контейнер для побочных эффектов