所以我正在为学校的高级计算机科学项目写一个二十一点游戏,我对VB中逻辑运算符的语法有疑问。
这是情况..
If X>Y AND (A=True Or B=True Or C=True) Then
Do something
End IF
例如,假设X确实大于Y,A为真,但B和C为假。据我所知,语句将执行,因为X大于Y,并且括号内的至少一个条件为真,但我不完全确定这是否正确。括号是否可以通过这种方式用于逻辑上正确的事情?或者我是否必须分别写出有关A,B和C的条件?例如......
If X>Y AND A=True Then
Do something
End IF
If X>Y AND B=True Then
Do something
End IF
If X>Y AND C=True Then
Do something
End IF
基本上,括号是否可以用作“短手”方法,以使代码稍微缩短并减少杂乱?我正在使用最新版本的VB,2015。
非常感谢您的帮助,我很感激!
P.S。 - 我无法将我的实际代码放在互联网上,因为这可能会让我的考试委员会遇到麻烦,因为这是官方评估。
答案 0 :(得分:0)
考虑这个原始的例子
If X>Y AND (A=True Or B=True Or C=True) Then
它说,必须满足2个条件才能将其评估为True
。 X
必须大于Y
,并且括号中的条件必须评估为True
。首先,让我们优化您的代码以便有效地使用.net
If X>Y AndAlso (A OrElse B OrElse C) Then
在您的情况下,如果X>Y
评估为False
,则没有理由继续。因此,AndAlso
。这是一个捷径。与OrElse
相同。如果A
的计算结果为true,则我们不需要评估其他条件 - 这是您的逻辑所支持的。现在,A=True
- 这是噪音。这就是为什么要命名布尔变量isSomething, hasSomething, [doneSomething]
,其中doneSomething
是动词,即created, completed, disposed, allowed
。
现在,让我们看看你的第二段代码。显而易见的是,你重新评估X>Y
3次,你可能会Do something
3次。这种语法被广泛使用,但它将沿着这些方向(与第一次评估创建相同的逻辑)
If Not X>Y Then
Return ' exit because your first evaluation must be true
End If
If A Then
' Do something
Return ' Success and return
End If
If B Then
' Do something
Return ' Success and return
End If
If C Then
' Do something
Return ' Success and return
End If
当然,上面的代码没什么意义,因为有明显的重复。这是更好的
If Not X>Y Then
Return ' exit because your first evaluation must be true
End If
If A OrElse B OrElse C Then
' Do something
End If
这更有意义,但是再次,转到第2行并使用优化的单行代码 - 它也会这样做。