Как удалить бесполезный код и упростить структуру кода

В программировании запах кода - это характеристика фрагмента кода, указывающая на наличие более серьезных проблем. Это субъективная характеристика, используемая для оценки того, хорошего качества код или нет, по его результатам.

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

Ленивый или халявный класс

Класс «ленивый» или «халявщик» - это класс, который делает слишком мало. Если он мало что делает, его, вероятно, не стоит добавлять, поскольку он в основном бесполезен.

Мы должны найти способ поместить все, что есть в ленивом классе, в место, где есть больше вещей. Класс, который имеет только один или два метода, вероятно, не слишком полезен.

Чрезмерное использование литералов

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

Литералы должны быть перенесены в их собственные файлы и сценарии. По возможности, в базах данных следует хранить более динамические данные. При необходимости это упрощает локализацию.

Например, если нам нужно разместить URL-адрес Medium в нескольких местах нашего кода, мы должны иметь одну константу с URL-адресом, а не повторять ее в нескольких местах.

Так что вместо:

const mediumRequest = fetch('http://medium.com');
//...
const mediumJsUrl = 'https://medium.com/topic/javascript';

Вместо этого мы должны написать:

const MEDIUM_URL = 'http://medium.com';
const mediumRequest = fetch(MEDIUM_URL)
//.,.
const mediumJsUrl = `${MEDIUM_URL}/topic/javascript`;

Это лучше, потому что мы не повторяли https://medium.com в нескольких местах. Тогда вносить изменения становится проще.

Цикломатическая сложность

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

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

Также может быть слишком много условных выражений и циклов, которые не являются вложенными.

Например, вместо того, чтобы писать что-то вроде:

Вместо этого мы должны написать:

Мы устранили вложенность и переместили некоторый глубоко вложенный код в его собственную функцию. Это повышает удобочитаемость, а разделение кода на отдельные функции упрощает тестирование.

Кроме того, использование операторов управления циклом, таких как continue и break, в дополнение к return может помочь в большом количестве управления потоком кода без глубокой вложенности условных операторов с большим количеством строк внутри.

Осиротевшая переменная или постоянный класс

Это классы, которые имеют набор констант, которые принадлежат другому, а не их собственному классу.

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

Например, если у нас есть класс со следующей переменной, и у нас есть следующие классы:

Тогда 'red' в классе Color лучше подходит для класса Apple, поскольку мы используем его только для Apple экземпляров.

Вместо этого мы можем написать:

class Apple {
  constructor() {
    this.color = 'red';
  }
}

И не беспокойтесь о классе Color.

Сгусток данных

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

Например, если у нас есть набор переменных, которые мы передаем в функцию следующим образом:

Мы должны переписать это так, чтобы вместо этого все переменные находились в объекте, и изменить сигнатуру функции, чтобы принять объект. Как видим, параметров шесть, это слишком много. Более пяти, вероятно, слишком много параметров для функции в большинстве случаев.

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

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

Мы также часто повторяли слово fruit.

Мы можем исключить все повторения и уменьшить количество переменных и параметров, с которыми нам приходится иметь дело, написав вместо этого следующее:

Теперь у нас есть только один объект и параметр, с которыми нужно работать, вместо нескольких переменных и параметров. Это намного проще для глаз и более организовано. Кроме того, нам труднее забыть ссылаться на некоторые переменные в нашем коде, поскольку нам приходится иметь дело только с одной.

Заключение

У нас не должно быть классов, которые обрабатывают небольшие или бессознательные переменные и константы. Кроме того, слишком много циклов и условий - особенно если они глубоко вложены - трудно читать и следовать.

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