条件文差
答えて
ここでの違いに設定しない限り、コンパイラは、if (obj = blah)
すなわち意図しない割り当てをキャッチしません
if (blah == obj)
は日から茎最初の形の使用は、生成されたコードです。両者はまったく同じコードを生成しませんが、実際にはこれは2つのステートメントの結果やパフォーマンスに影響しません。
しかし、独自の型を作成し、不等号演算子をオーバーライドして、うまく機能しない場合は、問題になります。オペレータへの最初の引数は、すなわち、nullの場合、この場合
public class TestClass
{
...
public static bool operator !=(TestClass left, TestClass right)
{
return !left.Equals(right);
}
}
:
はこのことを考えてみましょう。 if (null != obj)
の場合は、NullReferenceException
でクラッシュします。だから、
- コードを生成することは異なっている
- パフォーマンスと最後の結果は、あなたが関与タイプのコードが壊れている場合を除き、同じ
- でなければなりません
ここで私があなたが求めているのは、Cのコードを見たことです通常は次のようなコードを持っていました:
ここでは、平等チェックに切り替えました。その理由は、古いCコンパイラで書かれたプログラム(最近は、この問題を抱える傾向がある)で頻繁に発生するバグは、それを切り換えて等号の1つを忘れることです。この:
if (obj = null)
これは、代わりにそれを比較する変数にnull
を割り当てます。このバグを解消する最良の方法は、null
に何も割り当てることができないので、それを変えることです。それは変数ではありません。すなわち、これはコンパイルに失敗します:文の
if (null = obj)
いいえ、ありません。それはまったく同じです。
スタイルnull == obj
は、一般的なタイプのobj = null
が誤って変数にnullを割り当てないようにするために使用されることがありますが、!=
を使用する理由はまったくありません。
.NETではtypo obj = null
のために実際にはコンパイルされません。
コンパイラによって、誤って実行することを防ぐことができます。
Yoda conditionは、このコンパイラ機能がない他の言語のものです。
ありませんが、2番目の方法は、より一般的で、より読みやすい(と私の意見では、より論理的)である
最初はヨーダ条件です。それを使用しないでください。
これらはまったく同じです。
一部の人々は、この
if (obj = null) // should be obj == null
しかし、あなたの例では、それだけですので、もちろん、これは、!=
オペレータには適用されないようなエラーを回避するために、式の最初の部分としてnullを置くことを好みますスタイルの違い。
とC#で "obj = null"がブール値に評価されないため、if(obj = null)はコンパイルエラーです。 – Massif
コンパイル警告レベルが最大
第一のタイプは、検証を調整しないようにブール値を渡すことが可能であったC/C++、から来ました。例えば。何もない0は本当だった、とゼロは偽だった:だから
if (x = 5) { } // this was true always and changed x value
if (x == 5) { } // this was true, if x was equal to 5
、ヨーダの構文はコンパイラを受け取るために、使用された:
if (5) { } // true
if (0) { } // false
は、時にはそれはあなたが1「=」文字を入力するのを忘れた場合の問題を作成しました場合のエラー1 '=' を逃した:
if (5 = x) { } // this was generating compiler error for absent-minded programmers
if (5 == x) { } // this was true, if x was equal to 5
C#だから
、条件にのみブール値を許可しますブール型はどうですか?
if (y = true) { }
if (y == true) { }
if(y)だけ書くことができるので、これは役に立たないコードです。 結論:Yodaの構文はC/C++でなくなったので、もう使用する必要はありません。
- 1. リファクタリング条件文
- 2. は条件文
- 3. 条件文JavaScript
- 4. Jquery条件文
- 5. スイッチ条件文
- 6. 条件文
- 7. perlの条件文
- 8. 集計条件文
- 9. リストの条件文
- 10. PIGの条件文
- 11. 使用条件文
- 12. ReactJS/Javascript条件文
- 13. XPathの条件文
- 14. オフィス条件else文
- 15. バッシュ「インライン」条件文
- 16. jQueryの条件文
- 17. 条件文nullが
- 18. 条件文で$ read()
- 19. 注文(条件、interpolatedStringMessage)
- 20. 別の条件文の中React.js条件文の問題
- 21. 条件文への文
- 22. CTEの条件文の件数
- 23. Pythonの条件文とIf文構文
- 24. :条件=> "LIKE ___%" 構文
- 25. AND、OR条件文の
- 26. 条件文と集約
- 27. 条件文のMySQLサブクエリ
- 28. where節のSql条件文
- 29. 条件文の問題
- 30. ホームページのワードプレス条件文
バグが!=演算子をオーバーロードすると、それらは異なることがあります。 – CodesInChaos