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), хорошо сочетается с рефакторингом, так как она по умолчанию предоставляет эту защиту.
См. также
Книга Мартина Фаулера по рефакторингу: Refactoring - Improving the Design of Existing Code
Фреймворки для тестирования JavaScript (для проверки, что рефакторинг не нарушит функциональности):
Инструменты для проверки качества кода и поддержки рефакторинга: