演算子によって実行される等価性テストは、==
演算子によって実行される代入よりも優先され=
ます。したがって、isDir
変数はtrue
、演算子の両側==
が等しい場合に等しく設定され、そうでない場合は に設定されfalse
ます。つまり、次のように言うのと同じです。
if ((File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory)
isDir = true;
else
isDir = false;
これは VB.NET で可能です。他の言語についてはお答えできません。VB.NET では、次のようになります。
Dim isDir As Boolean = ((File.GetAttributes(path) And FileAttributes.Directory) = FileAttributes.Directory)
VB は=
代入演算子と等価テスト演算子の両方に同じ文字 ( ) を使用するため、コンテキストに基づいてどちらの操作を実行しているかを判断します。=
VB コンパイラは、最初の演算子が割り当てであり、2 番目の演算子が等価性テストであることを認識できるほどスマートです。ただし、これは明らかに紛らわしいため、読みやすさのために推奨されないことがよくあります。他の言語のバックグラウンドを持つ人々にとっては特に混乱を招きます。たとえば、C# では、次のようにして 2 つの変数を同じ値に設定できます。
int y;
int x = y = 5; // Both x and y will be set to 5
C# で発生する理由は、=
が常に代入演算子であり、代入式が常に代入された値に評価される (返される) ためです。したがって、この場合、式y = 5
は値 5 を変数y
に代入するだけでなく、値 5 にも評価されます。したがって、x
その式の値を設定すると、5 にも設定されます。ただし、VB では、結果は大きく異なります。
Dim y As Integer
Dim x As Integer = y = 5
VB では、コンパイラは式が等値テストであると想定するy = 5
ため、 に評価されFalse
ます。したがって、x = False
の値に応じて、どちらが機能するか、または機能しないかを設定しようとしますOption Strict
。