この質問はスタイルに関するものだと思います。CC が非常に高い (そして行数が多い!) アルゴリズムを使用しています。それを減らしたいのですが、グループ化できるコードがあるので簡単です。問題は、このようにすると、一度しか呼び出されない「小さな」関数を呼び出す「大きな」関数ができてしまうことです。
私の意見では、大きな関数を小さな断片に分割することは、関数が 1 回呼び出されるにもかかわらず、コードの読みやすさ (この場合) に優れています。
どう思いますか?似たような場合はどうしますか?
この質問はスタイルに関するものだと思います。CC が非常に高い (そして行数が多い!) アルゴリズムを使用しています。それを減らしたいのですが、グループ化できるコードがあるので簡単です。問題は、このようにすると、一度しか呼び出されない「小さな」関数を呼び出す「大きな」関数ができてしまうことです。
私の意見では、大きな関数を小さな断片に分割することは、関数が 1 回呼び出されるにもかかわらず、コードの読みやすさ (この場合) に優れています。
どう思いますか?似たような場合はどうしますか?
大きな関数をより小さく、ほぼ個別のチャンクに分割することは、完全に良い考えです。これにより、コードが読みやすくなり、制御フローがより明確になります。
関数が静的で 1 回しか呼び出されない場合、コンパイラはおそらく要求されなくても関数をインライン化するため、実行時のコストを心配する必要はありません。
一度しか呼び出されない関数を持つことは悪いことではありません。
それらはコードを整然と保ち、何も失うことはありません。関数呼び出しを追加するだけで、一度だけ呼び出す関数の実際のパフォーマンスへの影響はありません。
インライン化の一歩先を行くと、一度しか呼び出されない関数がたくさんあります。
次のような構造があるとしましょう。
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()
しかし、 がで 1 回だけ呼び出されるのに、なぜこのような問題が発生したのmain()
でしょうか。私たちのプログラムに取り組まなければならない次の人が、私たちmain()
が達成しようとしていることを見て、すぐに理解できるようにしたいからです.
複雑なアルゴリズムが単一の(または閉じる)画面で本のように読めることを意味する場合は、1回限りの関数が多数あるコードを見たいと思います。自分の位置を維持しようとして n 百行も上下にスクロールしなければならないとき、頭がどれほど痛いかわかりません。
これは正気を保ち、環境に役立ちます。なぜなら、アルゴリズムの 60 ページすべてを印刷して、それを読むためだけにテーブルに並べる必要がないからです :)
すでに述べたように、大きな関数をいくつかの小さな関数に分割することには多くの利点があります。読みやすさ (適切な名前付け)、ローカル変数のグループ化 (関数で使用される一時変数がより近くにあるため、キャッシュの動作が向上します)、これらの関数の 1 つが別の場所で再利用される可能性があります。