演算子

順位記号意味
1.メンバ
[]添え字
()呼び出し
2-単項マイナス
3*乗算
/除算
%剰余
4+加算
-減算
5<<左シフト
>>右シフト
6=等値
<>非等値
<小なり
>大なり
<=以下
>=以上
7Not否定
8And論理積
AndAlso論理積
9Or論理和
OrElse論理和
10Xor排他的論理和
11=代入
*=乗算代入
/=除算代入
%=剰余代入
+=加算代入
-=減算代入
>>=右シフト代入
<<=左シフト代入

順位の高い演算子ほど、先に適用されます。


. 演算子

左右が何であるかによって演算子の動作が変わってきますが、どんな場合でも、右オペランドは左オペランドの一部です。

左がモジュールやプラグインのエイリアスの場合、プロシージャやコマンドが呼び出されます。定数の場合は特に動作はありません。

左が何かの値の場合、標準コマンドの GetMember が呼び出されます。

左が名前空間の場合、型名に達するまで連結され、最終的にその型を表すオブジェクトになります。このオブジェクトは標準コマンドの CreateInstance などで使用できます。


[] 演算子

オペランドが持つ Default という名前のプロパティにアクセスし、値を取得します。代入の左辺値の場合、設定します。

標準リストおよび標準ディクショナリの場合、Default プロパティは Item プロパティと同じです。


() 演算子

オペランドとして指定されたプロシージャ、メソッドまたはコマンドを呼び出します。結果は呼び出したものに依存します。

演算の優先順位を変える場合にも使用します。


算術演算子

- (unary)
*
/
%
+
-

加算を除き、少なくともどちらか一方が数値でなければなりません。加算の場合で、少なくとも一方が文字列なら、文字列の連結を行ないます。

数値の場合で、最初のオペランドと 2 番目のオペランドの型が異なるときは、表現できる幅の大きいほうに変換されます。変換できない場合は例外がスローされます。数値の型を、表現できる幅の大きい順序に並べると次の通りです。

Double, Single, Decimal, Int64, Int32, Int16, Byte

このような拡大変換は、他の演算でも必要に応じて行なわれます。

算術演算子の結果は数値、または文字列になります。演算の結果オーバーフローが生じたり、整数 0 による除算が行なわれると、該当する例外がスローされます。


シフト演算子

<<
>>

最初のオペランドは整数でなければなりません。2 番目のオペランドは Int32 に変換されます。

右シフトは算術シフトであり、符号が保存されます。一方、左シフトは論理シフトであり、符号は保存されません。


比較演算子

=
<>
<
>
<=
>=

どちらか一方が数値の場合、もう一方も数値として大小を比較します。両方とも数値でない場合は、大小を比較可能な型であれば比較します。比較不可能な型で、等価でない場合は、最初のオペランドのほうが小さいものとして扱います。

Nothing は Nothing 以外と等しくなく、また全ての値より小さいものとして扱います。

結果はブール値になります。


ビット処理または論理演算子

Not
And
Or
Xor

オペランドはどちらも整数、またはどちらともブール値でなければなりません。

結果は、オペランドが整数ならば整数、ブール値ならばブール値になります。


ショートサーキット論理演算子

AndAlso
OrElse

オペランドはどちらもブール値でなければなりません。

これらの演算子の結果自体は、And および Or を用いた場合と一致します。ただし AndAlso と OrElse は、最初のオペランドがそれぞれ False と True の場合、2 番目のオペランドを評価せずに、それぞれ False と True を返します。

実際には AndAlso と OrElse は演算を行なうものではなく、次の式と同じ事をするものです。

If f() = False Then x = False Else x = g() 'x = f() AndAlso g()
If f() = True Then y = True Else y = g() 'y = f() OrElse g()

このことは特に、f 次第では g を処理してはいけない場合に有効です。

結果はブール値になります。


代入演算子

=
*=
/=
%=
+=
-=
>>=
<<=

いずれも左辺には、変数、設定プロパティまたはフィールドを指定する必要があります。

実際には全てが単純代入に変換されます。例えば以下の 2 行のコードは等価です。

a += b
a = a + b

加算代入演算子以外でも同様です。a は 2 回評価されます。したがって a に副作用のある式が含まれている場合、想定外の動作をする恐れがあります。