用于我的学校项目的VB中的逻辑运算符语法

时间:2015-11-23 20:24:22

标签: vb.net

所以我正在为学校的高级计算机科学项目写一个二十一点游戏,我对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。 - 我无法将我的实际代码放在互联网上,因为这可能会让我的考试委员会遇到麻烦,因为这是官方评估。

1 个答案:

答案 0 :(得分:0)

考虑这个原始的例子

If X>Y AND (A=True Or B=True Or C=True) Then

它说,必须满足2个条件才能将其评估为TrueX必须大于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行并使用优化的单行代码 - 它也会这样做。