-6

どちらの方がよいですか?パフォーマンスとベストプラクティスが賢明です。なぜ?

if ((process_checking == true) && (standard_output.Contains("0")))
{
}
else if ((process_checking == true) && (standard_output.Contains("1")))
{
}

また

if (process_checking==true)
{
   if (standard_output.Contains("0"))
   {
     blah
   }
   else
    //there is only 0 or 1 value
   {
      blah
   }
}
4

4 に答える 4

5

最初のものは 2 倍の値を調べる必要がprocess_checkingあるため、パフォーマンスは (非常に無視できるほど) 悪くなります。そしてもちろん、「0」と「1」についてのあなたの仮定は、最初のものは「1」をチェックする必要があり、これは少し余分な作業です.

本当の違いは読みやすさです。2 番目の方がはるかに読みやすく、何をしているのかが非常に明確であり、そうprocess_checkingでない場合はブロック全体がスキップされます。

入れ子が深すぎない限り、読みやすさを向上させるには、少し入れ子にすることをお勧めします。

于 2013-03-27T15:28:32.013 に答える
2

私の意見では、条件を繰り返さないため、2 番目のバージョンの方が優れていprocess_checkingます。process_checking制御フローがより認識可能で理解しやすいため、より読みやすくなり、最初のif句が失敗した場合に再計算する必要がないため、パフォーマンスがわずかに向上する可能性があります。ただし、これは私の意見です。他の人は異なる見解を持っているかもしれません...

于 2013-03-27T15:29:24.360 に答える
1

2 番目のインスタンスは、process_checking の比較を 1 回だけ行うため、優れています。そして、0 または 1 しかないと言っているので (入力は既に検証されています。これは、process_checking フラグの目的であると思います)、.Contains メソッドを 2 回呼び出さず、別の関数呼び出しと比較を保存します。

process_checking などのブール変数でできるもう 1 つの優れた方法は、.Contains メソッドで行ったように、それをその条件の唯一の部分にすることです。

if (process_checking) 
{
    if (standard_output.Contains("0")) { /*stuff*/ }
    else { /*other stuff*/ }
}
于 2013-03-27T15:29:14.597 に答える
0

私の意見では、両方を組み合わせた方が良い結果が得られます。なぜなら、2 つまたは 3 つのオプションのみに対処する場合があるため、 を使用しifelse ifより一般的には を使用ifすることが多いためelse、より良いアイデアは

if(condition = true)
{
// statements
}
else if(other condition = true)
{
// statements
}
else
{
// for all general options, which you have'nt addressed
}
于 2013-03-27T15:50:40.223 に答える