Глобальная область действия — это просто или кошмар, или и то, и другое

TL;DR: избегайте побочных эффектов в коде.

Проблемы

  • Связь
  • Нарушение принципа наименьшего удивления

Решения

  1. Отдавать предпочтение ссылочной прозрачности

Контекст

Ссылочная прозрачность всегда производит один и тот же вывод для заданного ввода и не имеет побочных эффектов, таких как изменение глобальных переменных или выполнение операций ввода-вывода.

Функция или выражение являются ссылочно прозрачными, если их можно заменить вычисленным результатом без изменения поведения программы.

Это свойство позволяет легче рассуждать о поведении программы и позволяет выполнять такие оптимизации, как кэширование и запоминание.

Функции рассматриваются как математические выражения, которые отображают входные данные в выходные.

Образец кода

Неправильный

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.