ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

VBのAnd/Orは、Cの&&/||と違う

うすうすそんな予感はしてたのですが、
Cの&&は前の条件が偽の場合、||は前の条件が真の場合、後ろの条件は評価されないのですが、
VBのAnd/Orはそういう動作ではなく、前の条件の真偽に関わらず、後ろの条件も評価されるという挙動のようです。
で、VB.NETでは、AndAlso/OrElseとかいう、また微妙な名前の演算子が導入されています。

Imports System

Public Class Test
	Public Shared Dim a As Integer = 0, b As Integer = 0
	
	Public Shared Sub Main
		If c() And d() Then
			Console.WriteLine("abc")
		End If
		Console.WriteLine(a)
		Console.WriteLine(b)
	End Sub

	Public Shared Function c As Boolean
		a = a + 1
		c = False
	End Function

	Public Shared Function d As Boolean
		b = b + 1
		d = True
	End Function
End Class

1,0が表示されるかと思いきや、1,1が表示されるワナ。
Cっぽくするには、AndAlsoを使います。