Глобальная область действия — это просто или кошмар, или и то, и другое
TL;DR: избегайте побочных эффектов в коде.
Проблемы
- Связь
- Нарушение принципа наименьшего удивления
Решения
- Отдавать предпочтение ссылочной прозрачности
Контекст
Ссылочная прозрачность всегда производит один и тот же вывод для заданного ввода и не имеет побочных эффектов, таких как изменение глобальных переменных или выполнение операций ввода-вывода.
Функция или выражение являются ссылочно прозрачными, если их можно заменить вычисленным результатом без изменения поведения программы.
Это свойство позволяет легче рассуждать о поведении программы и позволяет выполнять такие оптимизации, как кэширование и запоминание.
Функции рассматриваются как математические выражения, которые отображают входные данные в выходные.
Образец кода
Неправильный
let counter = 0; function incrementCounter(value: number): void { // Two side effects counter += value; // it modifies the global variable counter console.log(`Counter is now ${counter}`); // it logs a message to the console. }
Верно
function incrementCounter(counter: number, value: number): number { return counter + value; // Not too efficient }
Обнаружение
[Х] Автоматически
Большинство линтернов могут предупреждать вас при доступе к глобальному состоянию или Функциям и создавать побочные эффекты.
Теги
- Глобальный
Заключение
Функциональное программирование прекрасно и может многому нас научить, как писать чистый код.
Нам нужно понять его основы.
связи
Отказ от ответственности
Code Smells — это мое мнение.
Кредиты
Фото автора Даан Муий на Unsplash
Самым эффективным инструментом отладки по-прежнему является тщательная продуманность в сочетании с разумно размещенными операторами печати.
Брайан В. Керниган
Эта статья является частью серии CodeSmell.