2

私はこれをCとしてタグ付けしていますが、確かに多くの言語に適用されます。この理由は、コンパイラに依存する最適化を扱う質問の一部です。

プログラムでこのような状況に遭遇することがあります。

if(bob == 42)
{
    /* ... */
    return;
}
else
{
    /* ... */    
}

elseおそらくお分かりのように、ここでのブロックは厳密には必要ありません。同じことが他のプログラムフロー制御構造でも発生します。一部の「通常の」構成は、特別な条件のために冗長になります。問題は、これらの冗長なコードブロックを作成する理由はありますか?明快さ?状況が十分に複雑な場合、それはコンパイラーの最適化に役立つ可能性がありますか?

4

4 に答える 4

1

私自身のために、私はよく書く

if(bob == 42)
{
    /* ... */
    return;
}
/* else */

/* ... */

ここで何かが足りないかもしれませんが。

編集:私もここでスコープの問題に気づきました。少なくともC++では(古いCではなく、C99についてはわかりませんか?)、elseブロックには「独自の」異なるスコープがあり、注意する価値があるかもしれません。

于 2011-01-08T23:03:21.363 に答える
1

私はあなたが書いたものを「自己文書化コード」と呼んでいます。elseブロックを使用すると、bobが42に等しくない場合に、コードの2番目のブロックが起動することを簡単に確認できます。

私のコンピュータサイエンスのクラスでは、論理的なスキルをテストするために、このようなコードサンプルが提供されます。しかし、ビジネスの世界では、人々を混乱させたり、進行を遅らせるようなことをしたりしたくはありません。したがって、パフォーマンスへの影響が無視できると仮定して、最も読みやすいものを選択する必要があります。

自己文書化コードとは、関数名で、または実際のコードを読み取ることで、何が起こっているのかを説明できることを意味し、コードコメントの必要性を減らします。

コードの実行に関しては、タイミングコードを使用していくつかのテストを実行し、パフォーマンスが向上するかどうかを確認します。

于 2011-01-08T23:09:17.760 に答える
0

私は通常、ifステートメントに次のコメント構造を使用します。

/* Is bob 42 ? */
if(bob == 42)
{
  /* Bob is 42, return from function */

  return;
}
else
{
  /* Bob is not 42, do nothing */
}

コンパイラは、空のelse句を最適化する必要があります。

于 2011-01-08T23:16:35.253 に答える
0

私は1行だけを好みます(それがあなたが意味したものと同等である場合)

if (bob == 42) return;

これはそれが何をするかを言うだけで、追加のコメントは必要ありません。それどころか、elseブロックやコメントなどを入力すると、コードがわかりにくくなり、特に後続の重要な他のコードから、何が起こっているのか気が散ります。

コメントに少し変更を加えて同じメッセージを繰り返すと、コードの読者は愚かです。

それがコードスニペットで意図したものではなかった場合、両方の場合に本当に何かすることがあれば、私は好みます

if (bob == 42) {
  /* do something if bob is the chosen one */
} else {
  /* for all others apply the standard treatment */ 
}
return;

これは、returnステートメントをブロックの奥深くに隠すことはありません。

要約すると、コードのセマンティクスではなくフロー制御についてコメントする必要があると思われる場合は、何か問題があります。

于 2011-01-09T09:52:50.680 に答える