Рефакторинг: группировка кода в отдельную функцию. Часть 1

Вот и настал черед рассмотрения такого приема, как «Группировка кода в отдельную функцию». Или, его можно еще назвать «Выделение метода».

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

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

function showOwing($amount) {
	showBanner();
	// show details
	echo "name: ".$this->_name;
	echo "amount: ".$amount;
}

Выделим нижний участок кода в отдельный метод:

function showOwing($amount) {
	showBanner();
	showDetails($amount);
}
function showDetails($amount) {
	echo "name: ".$this->_name;
	echo "amount: ".$amount;
}

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

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

Порядок применения этого приема

  1. Создайте новый метод и назовите его так, чтобы имя соответствовало тому, ЧТО он делает, а не КАК он это делает. Если код, который Вы хотите выделить, очень прост (например, вызов одной функции), то его стоит выделять только в том случае, когда имя нового метода лучше объяснит читателю исходного текста смысл выделяемого кода. А если Вы не можете придумать более ясное имя для выделяемого кода, то его выделять в отдельный метод не стоит.
  2. Скопируйте выделяемый код из исходного метода в новый метод.
  3. Просмотрите выделенный код на наличие ссылок на локальные переменные исходного метода и добавьте эти переменные в качестве аргументов нового метода.
  4. Просмотрите, не изменяются ли значения этих локальных переменных внутри выделенного кода. Если изменяется значение только одной переменной, посмотрите, можно ли сделать выделяемый метод функцией-запросом (при этом вернуть значение этой переменной через return). Если это затруднительно или таких переменных несколько, Вы не сможете выделить этот код в новый метод. Нужно сперва применить прием разделения временных переменных, а затем повторить этот шаг. Можно устранить временные переменные приемом выделения временной переменной в метод.
  5. Замените выделенный код в исходном методе вызовом созданного метода.
  6. Протестируйте работу программы.

А примеры я приведу завтра :)





Читайте также:



Один ответ на “Рефакторинг: группировка кода в отдельную функцию. Часть 1”

  1. Игорь

    Полезный прием


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map