JavaScript:
Рефакторинг

Как:

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

До:

function calculateSum(arr) {
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i];
  }
  return sum;
}

console.log(calculateSum([1, 2, 3, 4])); // Вывод: 10

После:

function calculateSum(arr) {
  return arr.reduce((sum, num) => sum + num, 0);
}

console.log(calculateSum([1, 2, 3, 4])); // Вывод: 10

Видите, как метод reduce сокращает размер функции, сохраняя при этом функциональность? Вот что такое рефакторинг.

Глубокое погружение

Рефакторинг не стал формальной практикой до публикации книги Мартина Фаулера “Refactoring: Improving the Design of Existing Code” в 1999 году. Эта книга, наряду с ростом популярности гибкой разработки программного обеспечения, помогла перевести рефакторинг в мейнстрим.

Описание рефакторинга как аспекта разработки программного обеспечения похоже на объяснение, почему вы убираетесь в мастерской: вы делаете это, чтобы в следующий раз, когда вам нужно будет что-то починить (в данном случае, код), вы тратили меньше времени на борьбу с беспорядком и больше на решение самой проблемы.

Когда мы говорим о альтернативах рефакторингу, мы входим в более широкое обсуждение стратегий поддержки программного обеспечения. Например, можно выбрать полную перезапись кода, но это часто бывает дороже и рискованнее. Рефакторинг постепенно приносит постоянные преимущества без риска потерять все из-за внезапного пересмотра.

Рефакторингу помогло развитие интегрированных сред разработки (IDE) и инструментов, таких как JSHint, ESLint и Prettier в экосистеме JavaScript, которые автоматизируют проверку качества кода и выявляют возможности для рефакторинга.

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

Рефакторинг необходимо проводить осторожно; важно иметь надежный набор тестов, чтобы убедиться, что ваши изменения не изменили поведение программного обеспечения неожиданным образом — еще одна причина, почему разработка, управляемая тестированием (TDD), хорошо сочетается с рефакторингом, так как она по умолчанию предоставляет эту защиту.

См. также