質問
これは周りで見たことがありますが、その理由について明確な説明を聞いたことがありません...
2つのアイテムを比較するとき、「チェック」値は右側ではなく左側に配置されます。論理的には、まず変数をリストし、次に比較する値をリストします。しかし、「定数」が逆であることがわかりました。最初にリストされています。
この方法にはどのような利点がありますか?
ではなく:
if (myValue > 0)
見たことがあります:
if (0 < myValue)
または
if (Object.GimmeAnotherObject() != null)
は次のものに置き換えられます:
if (null != Object.GimmeAnotherObject())
これに関するアイデアはありますか?
TIA! ケビン
解決
一部の開発者は定数を左側に配置します
if(0 = myValue)
これは、0に値を割り当てることができないため、コンパイラからエラーが発生するためです。代わりに、次のように変更する必要があります
if(0 == myValue)
これにより、入力後の多くの苦痛なデバッグを防ぐことができます
if(myValue = 0)
完全に合法ですが、おそらくあなたが意図したもの
if(myValue == 0)
最初の選択はあなたが望むものではありません。プログラムを微妙に変更し、あらゆる種類の頭痛を引き起こします。それが明確になることを願っています!
他のヒント
定数が最初であるか、定数が最後であるかのような単純なルールは、あまり賢い選択ではないと思います。チェックではセマンティクスを表現する必要があると思います。たとえば、範囲チェックで両方のバージョンを使用することを好みます。
if ((low <= value) && (value <= high))
{
DoStuff(value);
}
しかし、私はあなたが言及した例に同意します-私は最後になりますが、他の方法でそれを行う明白な理由はわかりません。
if (object != null)
{
DoStuff(object);
}
C ++では、これらは両方とも有効でコンパイルされます
if(x == 1)
and
if(x=1)
ただし、このように記述した場合
if(1==x)
and
if(1=x)
その後、1への割り当てがキャッチされ、コードはコンパイルされません。
「安全」と見なされますconst変数を左側に配置します。
const変数を代入するために左側に置く習慣になると、デフォルトの動作モードになる傾向があるため、同等性チェックにも表示されるのはそのためです
.Netの場合、コンパイラは次のような条件で割り当てを許可しないため、無関係です。
if(x=1)
(他の人が言ったように)それは悪い習慣です(見逃しやすいからです)。
そのことを心配する必要がなくなると、変数を最初に、値を2番目に置く方が少し読みやすくなりますが、それが唯一の違いです。両側を評価する必要があります。
たとえば、「!=」とタイプされた「!=」のようなタイプミスをキャッチするコーディング慣行です。
左側にCONSTANTがある場合、定数に割り当てることができないため、すべての割り当て演算子がコンパイラによってキャッチされます。
多くの言語(具体的には C
)により、コードを書く際の柔軟性が大幅に向上します。左側の定数は普通ではないように見えますが、割り当てと条件を一緒にプログラムすることもできます。
if (var1 = (var2 & var3)) { /* do something */ }
このコードはブール値の結果を var1
に取得し、結果がtrueの場合は/ *何かを実行します* /
関連するコーディング慣行では、条件式に割り当てが含まれるコードを記述しないようにします。ただし、プログラミング言語ではそのようなことが可能です。条件内の割り当ては珍しいため、このようなコードにあまり出くわすことはありません。したがって、典型的なコードにはそのようなものはありません。
C 言語コーディングの実践的な記事があります。 「nofollow noreferrer」> IBM DeveloperWorks サイトは、おそらくその言語で書いている人々にまだ関連しています。