Рефакторинг: избавляемся от очевидных функций

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

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

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

Не знаю, как правильнее назвать этот прием :) Давайте назовем его «Избавление от очевидных функций». Только учтите, что под функциями тут будем подразумевать любые функции, т.е. методы классов в том числе.

Итак, пример:

function getRating() {
    return (moreThanFiveLateDeliveries()) ? 2 : 1;
}
function moreThanFiveLateDeliveries() {
    return _numberOfLateDeliveries > 5;
}

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

function getRating() {
    return (_numberOfLateDeliveries > 5) ? 2 : 1;
}

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

После этого получившаяся функция А снова рефакторится путем приема перегруппировки. А есть еще другой прием, о котором я тоже расскажу в одной из следующих статей - «Замена метода объектом». Так вот наш прием обычно применяется перед заменой метода объектом. Но не буду пока забегать вперед.

Я описал этот прием довольно просто, но, конечно, его не всегда возможно применить (например, в рекурсивных функциях или если функция-член является полиморфной). Но любой прием рефакторинга применяется там, где он бы облегчил чтение и понимание кода. Поэтому, выбор, применять или не применять, остается за Вами.





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



Один ответ на “Рефакторинг: избавляемся от очевидных функций”

  1. MODist

    Пример, по-моему, совсем не очевидный.


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