Подтвердить что ты не робот

Сколько строк кода должно иметь функция/процедура/метод?

Возможный дубликат:
Когда функция слишком длинная?

Недавно мне была дана незавидная задача пересмотреть плохой код, написанный другим разработчиком, и документировать плохие практики. (Это все для того, чтобы, конечно же, отказаться от оплаты за работу разработчика, а не от любой альтруистической причины!)

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

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

Любые идеи?

Дубликат: Когда функция слишком длинная?
Дубликат: Лучшее правило для максимального размера функции?

4b9b3361

Ответ 1

Это не о строках кода. Как Стив Макконнелл и Боб Мартин говорят (две довольно хорошие ссылки о лучших методах кодирования), метод должен делать одно и только одно. Однако многие строки кода, которые требуется сделать, - это то, сколько строк у него должно быть. Если эту "одну вещь" можно разбить на более мелкие вещи, каждый из них должен иметь метод.

Хорошие подсказки, которые ваш метод делает не одно:

  • Более одного уровня отступа в методе (указывает слишком много логических ветвей, чтобы делать только одно)
  • "Разрыв абзаца" - пробел между логическими группами кода указывает, что метод выполняет несколько операций

Просто чтобы назвать несколько. Боб Мартин также говорит, чтобы сохранить его около 10. Лично я обычно стараюсь стрелять за 10. Если он начинает приближаться к 20, это ментальный флаг, чтобы уделять более пристальное внимание этому методу. Но, в конечном счете, LoC - это плохая метрика для всего, что угодно. Это только полезный индикатор, который потенциально может указывать на реальную проблему.

Ответ 2

Реальный ответ

Нет конкретного номера.

Конкретный ответ

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

Общая практика

Вы даже не должны смотреть на него так, но в какой-либо одной функции не должно быть ничего сложного.

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

Самый большой преступник, которого я вижу, составляет 3-4 + булевых условия, взорванных в середине if-утверждения. Оберните все это одним логическим с хорошим именем, а затем заверните все части, которые составляют его, которые сложны сами по себе.

Ответ 3

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

Относительно конкретно к максимальной длине цитата из кода Complete, обычно считающаяся одной из лучших книг по теме кодирования:

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

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

Ответ 5

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

Ответ 6

Как можно меньше.

Ответ 7

Я не помню, где, но я думаю, что прочитал, что в .Net компиляторы оптимизированы для коротких методов. Я думаю, что они отлично справились с чем-то вроде 30 строк.