2017-05-31 1 views
-1

オブジェクトは、いくつかの値と等しいかどうかをチェックする場合は、間にいくつかの違いがあります:比較演算子に対するオペランドの順序は重要ですか?

つまり
myObject == someValue 

または

someValue == myObject 

は、比較演算子のオペランドの順序は重要ではありませんか?コーディングスタイルの問題ですか?

私は前者を使っていましたが、これまでに見たことのない後者を使っているプロジェクトがあります。

例えば

if (data != null) 
    data.Write(writer); 

又は

if (null != data) 
    data.Write(writer); 

プロジェクトの一部のメンバーは、後者を使用してきたが、私は、前者を使用しています。

ありがとうございました。

+0

唯一の違いは読みやすさです。ハードコーディングされた値が比較演算子の右側にある場合、ほとんどの人が読みやすくなります。 –

+2

問題はありません。 '(null!= data)'は口語的に "ヨーダ条件"として知られています。私は5年前の私の現在の仕事についてインタビューをしていたfizzの話題に気まぐれなものを使いました。私は通常、他のオペランドがlongメソッド呼び出しであるか、またはそのようなものがある場合にのみそれを行うでしょう、そして、定数を最初に置くことは、判読性を決定的に助けますが、その場合は代わりにローカルに代入する必要があります。 –

答えて

2

私には違いはないと思います。少なくとも、コンパイラが同じものを最適化しないとは限りません。

あなたが観察していることは、しばしばYoda Conditionsと呼ばれます。 (言い換えれば、ヨーダの話し方に似ています。)そして、彼らは主に個人的な好みの問題です。それらを提唱

人々は、たとえば、利点をすぐに指摘している:コンパイラエラーを生成する

if (true = something) 

とすぐにキャッチさ:

if (something = true) 

は一方で、実行時のバグを生成します。とにかくそれまでにユニットテストでエラーが見つかったはずだと私は反論するだろうが。そして、チーム上の他のプログラマーからの混乱(この質問を掲示しているあなたの不安な好奇心だけでも)は、プロジェクトで時間が失われていると、同様に主張するだろう。しかし、私は逃げる:)

+1

また 'if(something = null)'は警告を生成するはずです。 –

+0

@MikeNakis:コンパイラと言語に依存するかもしれませんが、はいとすることに同意します。 – David

+2

@MikeNakis警告は生成されません。式が 'if'文のブール値に解決されないため、コンパイラエラーが発生します。コードが 'something = true' *だった場合、コードは実際にコンパイルでき、それがコードであれば警告を生成しません。 – Servy

0

私の意見では同じです。私が言うなら、

(1 != 2) = true 

(2 != 1) = true 

どちらも同じ回答になります。私が考えることができる唯一のことは、あなたが働いている場所に、ある方法や他の方法を必要とするコーディング標準がある(私は決してそのようなコーディング標準を見たことがない)ということです。私は、現在作業中のプロジェクトと同じ方法を採用しています。

関連する問題