С функция вызывается только один раз и цикломатическая сложность - PullRequest
4 голосов
/ 21 мая 2010

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

По моему мнению, разбивка большой функции на маленькие части лучше для удобочитаемости кода (в данном случае), несмотря на то, что функции вызываются один раз.

Что вы думаете?Как дела в подобных случаях?

Ответы [ 4 ]

7 голосов
/ 21 мая 2010

Идея разбить большую функцию на более мелкие, в основном отдельные фрагменты. Это делает код более читабельным, а поток управления - более понятным.

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

3 голосов
/ 21 мая 2010

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

2 голосов
/ 21 мая 2010

Выходя за пределы вставки, существует множество функций, которые вызываются только один раз.

Допустим, у нас есть такая структура:

typedef struct foo {
     char *foo;
     int bar;
     double foobar;
} foo_t;

И мы пишем что-то, чтобы инициализировать / выделить это:

foo_t *foome(void)
{
    foo_t *ret;

    ret = (foo_t *) malloc(sizeof(struct foo));

    ...
    ...
}

Но почему мы прошли через все эти неприятности, когда foome() вызывается только один раз, в main()? Потому что мы хотим, чтобы следующий человек, имеющий дело с нашей программой, смог взглянуть на main() и сразу понять, чего мы пытались достичь.

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

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

0 голосов
/ 21 мая 2010

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

...