算術演算子
ほとんどの算術演算子はVB6以前や他の言語と同じです。 剰余を求めるには%
ではなくMod
を使います。
Dim i As Integer
i = 1 + 2 ' 加算 : i = 3
i = 3 - 1 ' 減算 : i = 2
i = 4 * 3 ' 乗算 : i = 12
i = 6 / 2 ' 除算 : i = 3
i = 5 Mod 3 ' 剰余 : i = 2
i = 5 \ 3 ' 商 : i = 1
i = 2 ^ 3 ' べき乗 : i = 8
C言語やC#などとは異なり、演算子/
は整数同士の除算の場合でも結果はDoubleとなります。 C言語・C#などと同様に除算した結果を整数で得たい場合は演算子\
を使います。
Dim d As Double = 5 / 2 ' d = 2.5
Dim i As Integer = 5 \ 2 ' i = 2
Mathクラスのメソッドを使うことでも剰余と商、べき乗を求めることができます。
演算子+
は文字列の連結にも使われます。 文字列の連結は演算子&
でも行うことができます。
Dim s As String = "String"
s = s + "文字列" ' 文字列の連結 : s = "String文字列"
s = s & "String" ' 文字列の連結 : s = "String文字列String"
複合代入演算子
VB.NETからは複合代入演算子が使用できるようになりました。 Mod
を除く算術演算子は複合代入演算子として使用することができます。
Dim i As Integer = 5
i += 1 ' i = i + 1 と同等
i -= 2 ' i = i - 2 と同等
i *= 3 ' i = i * 3 と同等
i /= 4 ' i = i * 4 と同等
i \= 5 ' i = i \ 5 と同等
i ^= 6 ' i = i ^ 6 と同等
文字列連結の演算子も複合代入演算子として使用できます。
Dim s As String = "String"
s += "文字列" ' s = s + "文字列" と同等
s &= "String" ' s = s & "String" と同等
インクリメント・ディクリメント
VBにはインクリメント演算子++
、ディクリメント演算子--
は存在しません。 代わりにi = i + 1
, i = i - 1
とするか、複合代入演算子を使ってi += 1
, i -= 1
とすることでインクリメント・ディクリメントを行うことができます。
Dim i As Integer = 0
i += 1 ' i = 1 となる
i += 1 ' i = 2 となる
i -= 1 ' i = 1 となる
i -= 1 ' i = 0 となる
VBでは次の例のように前置形式のインクリメント演算子のようなコードを記述してもコンパイルエラーとはなりませんが、これは単項の符号演算子+
または-
を複数個並べたものとみなされ、インクリメント・ディクリメント演算子とは解釈されません。
Dim i As Integer = 1
Dim j As Integer
j = ++i ' +(+i) あるいは +1 * +1 * iと同等
Console.WriteLine(j) ' 1が出力される
j = --i ' -(-i) あるいは -1 * -1 * iと同等
Console.WriteLine(j) ' 1が出力される
j = ---i ' -(-(-i)) あるいは -1 * -1 * -1 * iと同等
Console.WriteLine(j) ' -1が出力される
スレッドを使った操作で不可分(アトミック)なインクリメント・ディクリメント操作を行う必要がある場合は、Interlocked.IncrementメソッドもしくはInterlocked.Decrementメソッドを使うことができます。