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 на границах.