1

私はこれを見てきましたが、理由の明確な説明を聞いたことがありません...これは、C#、VB.NET、Perlなどだけでなく、実際にはあらゆる言語に当てはまります。

2 つの項目を比較する場合、「チェック」値が右側ではなく左側に表示されることがあります。論理的には、最初に変数をリストし、次に比較対象の値をリストします。しかし、「定数」が最初にリストされている逆を見てきました。

この方法にはどのような利点がありますか?

したがって、代わりに:

if (myValue > 0)

私は見た:

if (0 < myValue)

また

if (Object.GimmeAnotherObject() != null)

は次のように置き換えられます。

if (null != Object.GimmeAnotherObject())

これに関するアイデアはありますか?

ティア!ケビン

4

5 に答える 5

8

一部の開発者は、このように左側に定数を配置します

if(0 = myValue)

これは、値に 0 を割り当てることができないため、コンパイラからエラーが発生するためです。代わりに、次のように変更する必要があります。

if(0 == myValue)

これにより、多くの面倒なデバッグが回避されます。

if(myValue = 0)

完全に合法ですが、おそらくあなたが意味した

if(myValue == 0)

最初の選択はあなたが望むものではありません。それはあなたのプログラムを微妙に変更し、あらゆる種類の頭痛の種を引き起こします. それが明確になることを願っています!

于 2009-06-16T11:38:21.840 に答える
2

定数のような単純なルールはないと思いますが、定数の最初または定数の最後はあまり賢明な選択ではありません。チェックはセマンティクスを表現する必要があると思います。たとえば、範囲チェックでは両方のバージョンを使用することを好みます。

if ((low <= value) && (value <= high))
{
    DoStuff(value);
}

しかし、私はあなたが言及した例に同意します-私は定数が最後になり、他の方法でそれを行う明白な理由がわかりません。

if (object != null)
{
    DoStuff(object);
}
于 2009-06-16T11:38:16.770 に答える
2

C++ では、これらは両方とも有効であり、コンパイルされます

if(x == 1)

if(x=1)

でもこう書くと

if(1==x)

if(1=x)

1 への割り当てがキャッチされ、コードはコンパイルされません。

const 変数を左側に配置する方が「安全」と見なされます。

const 変数を代入のために左側に配置する習慣を身につけると、それがデフォルトの操作モードになる傾向があります。そのため、等値チェックにも表示されます。

于 2009-06-16T11:38:32.043 に答える
2

.Net の場合、次のような条件ではコンパイラが代入を許可しないため、これは無関係です。

if(x=1)

なぜなら(他のみんなが言ったように)それは悪い習慣だからです(見逃しやすいからです)。

それについて心配する必要がなくなったら、変数を最初に、値を 2 番目に置く方が少し読みやすくなりますが、それが唯一の違いです。両側を評価する必要があります。

于 2010-09-14T10:16:28.303 に答える
1

たとえば、「=」と入力された「!=」などのタイプミスをキャッチするためのコーディング方法です。

左側に CONSTANT がある場合、定数に代入できないため、すべての代入演算子がコンパイラによってキャッチされます。

多くの言語 (特にC) では、コードを書く際に非常に柔軟に対応できます。左側の定数は奇妙に思えますが、次のように代入と条件を一緒にプログラムすることもできます。

if (var1 = (var2 & var3)) { /* do something */ }

このコードはブール値の結果を取得しvar1、結果が true の場合は /* 何かを行います */ 。

関連するコーディング プラクティスとして、条件式に代入が含まれるコードを記述しないようにします。プログラミング言語はそのようなことを可能にしますが。条件内の割り当ては珍しいため、通常のコードにはそのようなものがないため、このようなコードにはあまり遭遇しません。

IBM DeveloperWorksのサイトには、その言語で書いている人にとってはおそらく今でも関連する、優れたC言語コーディングの実践に関する記事があります。

于 2009-06-16T11:44:51.000 に答える