3.8 KiB
3.8 KiB
#рефакторинг #методы_рефакторинга
Проблема
Один и тот же код выполняется каждый раз, когда вы вызываете определенную функцию
result.push(`<p>title: ${person.photo.title}</p>`);
result.concat(photoData(person.photo));
function photoData(aPhoto) {
return [
`<p>location: ${aPhoto.location}</p>`,
`<p>date: ${aPhoto.date.toDateString()}</p>`,
];
}
Решение
Перенести инструкции в функцию, тогда понять эти инструкции легче как часть вызываемой функции
result.concat(photoData(person.photo));
function photoData(aPhoto) {
return [
`<p>title: ${aPhoto.title}</p>`,
`<p>location: ${aPhoto.location}</p>`,
`<p>date: ${aPhoto.date.toDateString()}</p>`,
];
}
Причины рефакторинга
Если один и тот же код выполняется каждый раз, когда вы вызываете определенную функцию, стоит подумать о переносе этого повторяющегося кода в саму функцию. Таким образом, любые будущие изменения повторяющегося кода могут выполняться в одном месте и использоваться во всех вызовах.
Порядок рефакторинга
- Если повторяющийся код не соседствует с вызовом целевой функции, используйте рефакторинг Перемещение инструкций (Slide Statements), чтобы поместить его рядом с функцией.
- Если целевая функция вызывается только в одном месте, просто удалите код из его исходного местоположения, вставьте в целевую функцию, выполните тестирование и проигнорируйте остальную часть этой техники.
- Если у вас есть несколько мест вызова, примените рефакторинг Извлечение функции (Extract Function) к одному из них, чтобы извлечь как вызов целевой функции, так и инструкции, которые вы хотите переместить в нее. Дайте ей временное имя, которое будет легко найти.
- Преобразуйте все остальные вызовы таким образом, чтобы в них использовалась новая функция. Выполняйте тестирование после каждого преобразования.
- Когда все исходные вызовы будут использовать новую функцию, примените рефакторинг Встраивание функции (Inline Function), чтобы полностью встроить исходную функцию в новую, удалив при этом исходную функцию.
- Выполните рефакторинг Переименование переменной (Rename Variable), чтобы изменить имя новой функции, дав ей имя исходной функции.
