3

オブジェクトがnilであるかどうかを確認しているときに、誰かが1を使用します。

if (object == nil) {
    //...
}

誰かが2を使用します:

if (nil == object) {
    //...
}

1と2の違いはありますか?どちらがいいですか?

4

9 に答える 9

7

=違いは主に、このような例を誤って忘れた場合です

 (nil = myObject)

nilに値を割り当てることができないため、エラーが発生します。つまり、それはある種のフェイルセーフです。

于 2012-06-25T09:35:36.103 に答える
4

の使用は、nil == object実際には、表現でaを見逃すという不幸なケースを防ぐためのイディオムです=。たとえば、次のように記述します。

if (object == nil)

しかし、書く:

if (object = nil) {

これは典型的なエラーであり、割り当てには式としての値もあり、条件はfalse(エラーなし)と評価されるため、追跡が非常に困難ですが、オブジェクトも消去されます...

一方、書く

if (nil == object)

以来、その種のエラーがコンパイラによって検出されることを保証します。

if (nil = object)

通常の割り当てではありません。

実際、最新のコンパイラ(デフォルト設定)は、「意図しない」割り当ての種類に対して警告を提供します。

if (object = nil) {

警告を発します。しかし、それでもこれは注意が必要です。

于 2012-06-25T09:37:07.317 に答える
4

他の人が指摘したように、それらは同等です。それを行う別の方法もあります:

if (!object) {
    // object is nil
}
于 2012-06-25T09:52:43.693 に答える
3

一部の開発者が「ヨーダ記法」を好む理由は、不注意で書く可能性が低いためif (object = nil)です(割り当てに注意してください)。

コンパイラは、余分な括弧なしで条件式を割り当てるときに警告するため、これはもう問題ではありません。

ヨーダ記法は読みにくいので避けるべきです。

于 2012-06-25T09:36:53.977 に答える
2

それらは同等です。昔はif (CONST == variable)、偶発的な割り当てのリスクを減らすために書くのが一般的でした。たとえばif (variable = CONST)、変数に定数を割り当て、ifステートメントは変数ではなく定数の値に応じてtrueまたはfalseと評価されます。

今日では、IDEとコンパイラは通常、そのような行に警告を出すのに十分賢いでしょう。そして、多くの人々は読みやすさのために最初のバージョンを好みます。しかし、実際にはそれはスタイルの問題です。

于 2012-06-25T09:37:32.920 に答える
1

比較演算子==を使用する場合のベストプラクティスは、オペランドの左側に定数を配置することです。このようにして、比較の代わりに代入演算子を誤って入力することはありません。

例:

(iVarOne == 1)

機能的に等しい

(1 == iVarOne)

しかし

(iVarOne = 1)

とは大きく異なります

(1 = iVarOne)

このベストプラクティスは、比較演算子の割り当てを誤って入力したときにコンパイラが文句を言わないという事実を回避します...

于 2012-06-25T09:38:47.067 に答える
1

いいえ、読みやすさだけで私は最初のものを好みますが、他の開発者は他のものを好むかもしれません。

コーディングスタイルの問題であり、技術的な違いはまったくありません。

2番目の方が優れていると言う人もいるかもしれません。より明確であるnilため、最初に来るので、テストしていることに気づきやすくなりますがnil、これも開発者の好みによって異なります。

于 2012-06-25T09:33:09.267 に答える
0

まったく違いはありません。読みやすさがすべてです。クリーンなコードを書きたい場合は、これに注意する必要があります。

評価の右側に「オブジェクト」を配置すると、実際に何をしているのかがわかりにくくなります。

于 2012-06-25T09:37:29.047 に答える
-3

NILではなく、NULLです。それらは同じものです。==演算子は比較演算子です。一般的な傾向として、(object == NULL)を使用します

于 2012-06-25T09:36:44.730 に答える