4

たとえば、次の 2 つのコードを考えてみましょう。

for (i = 0; i < 1000; i++)
{
   if ( i % 2 != 0)
   {
       continue;
   }
   else
   {
     ...  
   }    
}

for (i = 0; i < 1000; i++)
{
   if (i % 2 == 0)
   {
     ...  
   }    
}

どちらも同じ結果になります。では、どちらを使用しますか?どちらの方がよいですか?両者の間に大きなパフォーマンスの違いはありますか? 皆さんがこれについて何を見ているか見てみましょう。私は、これらのことについてここで見られる議論が好きです。これにより、コードの記述が改善され、実行時間が短縮される可能性があります。答えが見つからなかったので、この質問を投稿しました。答えが見つからない場合は、将来このような別のものを投稿する可能性があります。

PSあなたがそれなしで行くことができるときにループ内でcontinueを使用する目的は何ですか?

4

3 に答える 3

5

この特定の例では?何でも使うことに目的はありcontinueません。

あなたが言ったように、両方のコードサンプルはまったく同じ結果を生成します。そして、どちらも他よりも検出可能に速くなることはありません。

どちらを選択するかは、ある種の誤った「最適化」の試みではなく、読みやすさと明確さに基づいて決定する必要があります。それを念頭に置いて、2番目ははるかに明確です。実際のコードベースで最初のものを使用した人のプログラミングチョップに真剣に質問したいと思います。

基本的なガイドラインとして、if-elseシングルで使用できる場合は絶対に使用しifないでください。この場合、ステートメントを使用してその反対を比較!=し、見つけます。これは、と言っているようなもので、二重否定を生成します。読んだり理解したりするのは非常に難しい。一般に、これを正確に防ぐために、ステートメントでは、否定的な条件ではなく、肯定的な条件を評価するようにしてください。else!(!=)if

そして、これに似た追加の質問を投稿する理由は本当にありません。すべての答えは同じになります。考えられるパフォーマンスの違いを無視し(最適化コンパイラーが与えられた場合、それが存在する可能性はほとんどありません)、それを読まなければならない人間として最も理にかなっているバージョンに焦点を合わせます。反対のアドバイスをする人は無視してください。

于 2011-05-14T14:20:48.937 に答える
0

私の意見では、フローに不要なコードパスが追加されるため、最初のオプションは絶対に考慮しません。それがパフォーマンスの面でより良い結果につながるとは思いませんが、IL コードを調べることができることを確認したい場合。

于 2011-05-14T14:21:18.387 に答える
0

醜い形式を使用することを正当化するほどの違いはありません。

この特定の例では、どちらよりも優れています

For(i = 0; i < 1000; i+=2)
{
    ...    
}

割り切れるかどうかのチェックはまったく必要ないからです。

于 2011-05-14T14:23:36.573 に答える