graycrow
@graycrow

Какой размер метода/функции "в экранах" считается нормальным?

Несколько раз видел на Хабре комментарии где заявлялось что если ваши методы/функции имеют размер (в строках по вертикали) больше чем х * размер экрана (где х = 0.5..1) то вы плохой программист пишущий плохой код.


Насколько уместно это заявление? Я пишу на ASP.NET C# для «энтерпрайз» и некоторые методы занимают и по два-три экрана, потому что это всякие проверки на всякие дурацкие условия, доступ к данным, вывод и форматирование и т.п., которые и рад бы разбить на меньшие куски, но выглядеть это будет не очень — не будешь же присваивать например значения контролам 1..10 в одном методе а 11..20 в другом. Я понимаю когда уместно выделить некоторое действие в отдельную функцию, но не всегда это получается, как я писал выше.


В общем, нужно ли волноваться по этому поводу или можно забить? На сколько большие функции у вас? Особенно интересно мнение веб-разработчиков на .Net.
  • Вопрос задан
  • 7534 просмотра
Пригласить эксперта
Ответы на вопрос 10
@holivar
Тут один хабраюзер вообще признался, что код прямо на мобильнике пишет… В его случае вообще тяжко с этим вопросом состыковаться
Ответ написан
Kalantyr
@Kalantyr
Смысл этого правила в том, чтобы метода был обозрим с одного взгляда.

Бывает — в методе всего пять строк, но при этом 4 уровня вложенности и такие длинные выражения, что нужно полчаса потратить чтобы понять. Так что смысл не в количестве строк, а в суммарной сложности понимания метода.

Кроме количества строк есть еще длина строк, ее тоже лучше ограничивать. Я давно пишу на C# и часто делаю внутри кода отступы пустыми строками, вставляю регионы (#region). Отступы немного увеличивают количество строк, а регионы — существенно сокращают (в свернутом состоянии).

Кроме того, у меня широкоэкранный монитор повернут на 90 градусов, так что на один экран входит два обычных :)
Ответ написан
Комментировать
kekoz
@kekoz
Длинные функции/методы я в общем случае нахожу уместными разве только при каких-то нетривиальных математических расчётах. А в общем не математическом случае функции/методы длиннее 50-60 строк (пара экранов) уже начинают напрягать.

Впрочем, значительно чаще напрягает не количество строк, а их содержимое :)
Ответ написан
Комментировать
XPilot
@XPilot
Компактность!
Первое правило: функции должны быть компактными. Второе правило: функции должны быть еще компактнее. Я не могу научно обосновать свое утверждение. Не ждите от меня ссылок на исследования, доказывающие, что очень маленькие функции лучше больших. Я могу всего лишь сказать, что я почти четыре десятилетия писал функции всевозможных размеров. Мне доводилось создавать кошмарных монстров в 3000 строк. Я написал бесчисленное множество функций длиной от 100 до 300 строк. И я писал функции от 20 до 30 строк. Мой практический опыт научил меня (ценой многих проб и ошибок), что функции должны быть очень маленькими. <...> Однако строки не должны состоять из 150 символов, а функции из 100 строк. Желательно, чтобы длина функции не превышала 20 строк.
Роберт Мартин, «Чистый код» (хоть примеры и приводятся на Java, думаю что книга все равно полезная).
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Ну это же не абсолютное правило.

Если размер метода больше некоего предела — это просто сигнал о том, что что-то, возможно. не так. Но это может быть и ложная тревога.
Если сомневаетесь (вот как сейчас) — попросите коллег отревьюить.

Кстати, форматирование можно возложить на шаблонизаторы.
Ответ написан
Комментировать
@MikhailEdoshin
Если код однообразный, то можно и длинную функцию писать. Я для себя начинаю задумываться, если больше двух экранов (С). Если что, в исходнике Python есть функция и в 2000 строк :) При этом Python — весьма неплохой пример C-кода.
Ответ написан
Комментировать
VenomBlood
@VenomBlood
Я для себя взял правило — метод может иметь длину и сложность до той степени, пока я не начинаю его «чувствовать».
Пока метод не «ощущается» — он достаточно прост, если же его можно чем-то выделить из остальных — значит что-то в нём не так.
Ответ написан
opium
@opium
Просто люблю качественно работать
По моему это правило фигня, и его придумали плохие программисты чтобы мешать программистам.
Ответ написан
Многое зависит от языка. Сравните два варианта:

c#: button.Click += (o,e) => doSomething();

java: button.addClickListener(new ClickListener(){
@Override
public void onClick(Widget sender){
doSomething();
}});

Разница в количестве строк 5 раз, а делают одно и тоже.
Ответ написан
Комментировать
@CyMpak
Одно действие — один метод. Декомпозируется декомпозируется — несколько частных методов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы