一部のプログラマーは、意図しない割り当てを避けるためif(1 == var)
に代わりに使用していると聞きました。if(var == 1)
なぜ、またはどのような場合に意図しない割り当てが発生するのですか?
2 に答える
問題は、ステートメントを間違って入力した場合です。
if (var = 1)
対
if (1 = var)
最初のケースでは、 の後のコードif
は無条件に実行されます (コンパイラからの警告のみで、警告を生成する義務はありませんが、良いコンパイラを使用していない場合は、警告を生成する義務はありません)。 、1つ入手してください!)。2 番目のケースでは、コンパイル時に構文エラーが発生するため、コードをコンパイルする前に問題を修正する必要があります。
問題は常に露骨であるとは限りません。
if (var = 0)
if
もちろん、の後にコードを実行することはありません。ただし、多くの場合、次のようになります。
if (var = function(arg1, arg2))
割り当てるつもりなのか、比較するつもりなのかはっきりしません。次のように記述して、コンパイラとコード リーダー (人間) に明確にすることができます。
if ((var = function(arg1, arg2)) != 0)
また
if (var == function(arg1, arg2))
「前後」の比較手法は使用しません。逆の条件は、ほぼ常に「間違っている」と解釈されるため、嫌いです。1 を変数と比較していません。私は自分の変数を 1 と比較しています。したがって、論理的には==
演算子は可換ですが、私は可換的に考えず、その「リスクの高い」方法を好みます。問題が問題になるのに十分な頻度で、割り当てと等価の間違いを犯していることに気づきませんでした。コンパイラは、間違いを犯した場合に警告します (そして、警告に注意を払い、問題がないようにコードを修正します)。
と間違えると
if (var = 1)
意図しない(?)代入が発生する可能性があります。まともなコンパイラは、余分な括弧のセットを含めない限り、それについて警告します
if ((var = 1))
コンパイラに意図を明確にするため。