advanced
Avoiding hidden side effects
Держите I/O, mutation, global state, time, randomness и retries visible на boundaries, чтобы behavior был testable и diagnosable.
Скрытые побочные эффекты — тихий I/O, мутация, глобальное состояние, время, случайность, логирование, ретраи — усложняют тесты и отладку. Чистая ядровая логика с эффектами на краях — практичная цель clean code. Честно именуйте effectful-функции и изолируйте недетерминизм через injectable clock или random source.
На интервью: разберите getter, который тихо пишет в storage, или validator, который шлёт email. Объясните рефакторинг ради предсказуемости.
Типовые ошибки: static singletons для клиентов; неявные ретраи в утилитах; общее mutable-состояние модуля в serverless handlers.
Компромисс — гибкость против сложности: знайте, когда достаточно более простого пути.
Чеклист:
- Помечайте функции, читающие/пишущие внешние системы.
- Инжектируйте время, ID и randomness в тестах.
- Доменные вычисления без сетевых вызовов.
- Документируйте retry и cache на границах.