4

読みやすさとは別に、単一行のループ/条件ステートメントをブレーキ付きとなしで記述した場合、パフォーマンスやコンパイル時間に違いはありますか?

たとえば、次の違いはありますか。

if (a > 10) 
    a = 0;

if (a > 10)
{
    a = 0;
}

?

4

6 に答える 6

6

もちろん、パフォーマンスに違いはありません。ただし、エラーが発生する可能性には違いがあります。

if (a>10)
  a=0;

誰かがコードを拡張して後で書く場合、

if (a>10)
  a=0;
  printf ("a was reset\n");

中括弧がないため、これは常に印刷されます。この種のエラーを回避するために、常に中括弧を使用するように要求する人もいます。

于 2012-11-08T11:20:21.347 に答える
4

いくつかの回答とは対照的に、コンパイル時のパフォーマンスの違いは有限ですが無視できます。実行時にいかなる種類の違いもありません。

于 2012-11-08T11:18:33.440 に答える
2

マシン コードには、そのような中括弧は含まれません。コンパイル後、もうありません{}。最も読みやすい形式を使用してください。

于 2012-11-08T11:18:36.343 に答える
2

いいえ、違いはありません。コンパイラは意味のない波括弧や改行などを取り除きます。

コンパイル時間はわずかに異なりますが、コンパイル速度が戻るよりも、この回答を読むためにすでにはるかに多くの時間を失っているほどわずかです。計算能力が向上するにつれて、このコストはさらに低下しますが、可読性を低下させるコストは低下しません。

要するに、読みやすいことをしてください。他の意味での有用な違いはありません。

于 2012-11-08T11:15:04.353 に答える
1

もちろん、実行時の違いはありません。ただし、コードの保守のためには、必ず 2 番目の方法を使用する必要があります。

私がこれを言っている理由は、将来、ブロックを展開するためにブロックにさらに行を追加する必要があるとします。最初の方法が古いコードに組み込まれている場合は、新しいコードを追加する前に を追加する必要があります。2番目のケースではこれを行う必要はありません。if-elsebraces

したがって、最初の方法よりも、将来的に 2 番目の方法にコードを追加する方がはるかに簡単です。

また、最初の方法を使用している場合は、次のように のsemi-colon後に入力エラーを行うことを意図していますif: -

if (a > 0);
    System.out.println("Hello");

したがって、あなたのHello意志が常に印刷されることがわかります。これらのエラーはcurly bracesif.

于 2012-11-08T11:17:39.273 に答える
-1

それはコーディングガイドラインの残りの部分に依存します。左中括弧が常に単独で行にある場合、中括弧を削除しても問題はありません。ただし、開き括弧が行末にあるifと、コンテンツに追加するときに見落としがちです。したがって、次のいずれかを選択します。

if ( a > 10 ) {
    a = 0;
}

行数に関係なく、または:

if ( a > 10 )
{
    //  several statements...
}

と:

if ( a > 10 )
    a = 0;

ステートメントが 1 つだけの場合。ただし、重要なことは、すべてのコードが一貫していることです。いくつかの異なるスタイルを使用する既存のコード ベースで作業している場合、新しいコードでは常に中かっこを使用します。視認性の高い場所。

于 2012-11-08T11:43:44.100 に答える