10

1 行関数についてどう思いますか? 悪いですか?私が考えることができる利点の 1 つは、コードをより包括的にすることです (適切な名前を選択した場合)。例えば:

void addint(Set *S, int n)
{
     (*S)[n/CHAR_SIZE] |= (unsigned char) pow(2, (CHAR_SIZE - 1) - (n % CHAR_SIZE));
}

私が考えることができる1つの欠点は、コードが遅くなることです(パラメーターをスタックにプッシュし、関数にジャンプし、パラメーターをポップし、操作を実行し、コードにジャンプします-そして1行だけですか?)

そのような行を関数に入れるか、単にコードに入れる方が良いですか? 一度しか使わなくても?

ところで、私はそれについての質問を見つけていないので、そのような質問が以前に尋ねられていたら許してください.

4

8 に答える 8

8

私は、あらゆる種類のロジックと機能を 1 行にまとめるのが好きではありません。あなたが示した例は混乱しており、意味のある変数名を使用して次々と操作を実行することで、いくつかの行に分けることができます。

この種のすべての質問について、 Robert C. Martin - Clean Code という本を参照することを強くお勧めします (購入するか、借りるか (ダウンロードしないでください) (無料)) 。すべての開発者が読むべき本です。

すぐに優れたコーダーになるわけではなく、将来醜いコードを書くのを止めることもありません。コードをより批判的な目で見て、コードを新聞記事のように読みやすくする必要があります。

于 2009-04-24T09:33:53.350 に答える
5

あなたの例はC(++)構文を使用しているように見えるので、単純な関数を呼び出すオーバーヘッドを排除するインライン関数を読みたいと思うかもしれません. ただし、このキーワードはコンパイラへの推奨事項にすぎず、マークしたすべての関数をインライン化するわけではなく、マークされていない関数をインライン化することを選択する場合があります。

.NET では、JIT は適切であると思われるメソッドをインライン化しますが、これを行う理由やタイミングを制御することはできません。 .

于 2009-04-24T09:33:40.200 に答える
1

1 行の関数に問題はありません。前述のように、コンパイラが関数をインライン化して、パフォーマンスの低下を取り除くことができます。

関数は、デバッグ、変更、読み取りが簡単で、意図しない副作用が発生する可能性が低いため、マクロよりも優先する必要があります。

一度しか使用されない場合、答えはあまり明白ではありません。それを関数に移動すると、複雑さの一部を新しい関数に移動することで、呼び出し関数をよりシンプルで明確にすることができます。

于 2009-04-24T09:35:16.107 に答える