Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #71, ОКТЯБРЬ 2006 г.

чудеса легкости

ФЛЕНОВ МИХАИЛ

Спецвыпуск: Хакер, номер #071, стр. 071-052-3


Как же мы любим объединять весь возможный код в одном методе! А ведь это грозит нам следующими проблемами:

- МЕТОД ОЧЕНЬ СЛОЖНО ЧИТАТЬ, ДАЖЕ ПРИ НАЛИЧИИ БОЛЬШОГО ЧИСЛА ПОДРОБНЫХ КОММЕНТАРИЕВ.

- КОД СЛОЖНЕЕ ИСПОЛЬЗОВАТЬ ПОВТОРНО. КОГДА МЕТОД ВЫПОЛНЯЕТ УЗКУЮ ЗАДАЧУ, ТО ЕГО МОЖНО ИСПОЛЬЗОВАТЬ В ДРУГОМ МЕСТЕ ПРОГРАММЫ, ГДЕ НЕОБХОДИМЫ ТЕ ЖЕ РАСЧЕТЫ. ЕСЛИ МЕТОД РЕШАЕТ НЕСКОЛЬКО ЗАДАЧ, ТО ВЕРОЯТНОСТЬ НЕОБХОДИМОСТИ ВЫПОЛНЕНИЯ ВСЕГО ТОГО ЖЕ В ДРУГОМ МЕСТЕ - НАМНОГО НИЖЕ.

- УСЛОЖНЯЕТСЯ ОТЛАДКА МЕТОДА, А В БОЛЬШИХ ПРОЕКТАХ И ОТЛАДКА ТЕСТИРОВАНИЯ ОТНИМАЕТ ДОСТАТОЧНО МНОГО ВРЕМЕНИ И СИЛ.

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

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

[улучшение методов.]

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

В Delphi 2005 появилась достаточно интеллектуальная функция Refactor/Extract Method. В JBuilder та же функция спрятана в меню Edit/Extract Method. Чтобы воспользоваться ею, необходимо выделить отрывок кода, который нужно переместить в отдельный метод и выбрать указанный пункт меню. Перед нами открывается диалоговое окно, в котором достаточно ввести имя нового метода. Все остальное среда разработки сделает сама, а именно:

1 БУДЕТ СОЗДАН И КОРРЕКТНО ОБЪЯВЛЕН НОВЫЙ МЕТОД.

2 ВМЕСТО КОДА, КОТОРЫЙ МЫ ВЫДЕЛИЛИ, БУДЕТ ВСТАВЛЕН ВЫЗОВ ВНОВЬ СОЗДАННОГО МЕТОДА.

Улучшение может потребоваться и в тех случаях, когда схожий код встречается в нескольких методах. И пусть они решают узкую задачу, но повторение кода не есть хорошо. Намного лучше выделить отдельный метод: это упростит сопровождение программы.

[размер метода.]

Многие авторитетные программисты считают, что методы должны быть максимально короткими, и если код не помещается на экран, то его необходимо разбить на несколько методов. Я бы не злоупотреблял этим правилом, потому что большое количество методов - тоже минус. Если метод решает одну и только одну задачу, то не стоит его делить на несколько, даже если он занимает два экрана. Просто купи монитор побольше :). Это, конечно же, шутка, - монитор побольше не нужен. Достаточно один раз отладить задачу и забыть про нее.

Назад на стр. 071-052-2  Содержание  Вперед на стр. 071-052-4