假设我有以下语句逻辑(我将在此示例中使用VBA,但它也适用于其他语言)
x = 1
y = 2
z = 1000
If x = 1 Or y = 2 Or z = 4 Then
Execute Code
End
编译器或执行程序是否发现第一个值为true,然后继续Execute Code
或者是否完成了语句的其余部分?
答案 0 :(得分:2)
我不能代表VBA,但我可以说它是特定于语言的。在某些语言中,程序员可以使用“短路”AND和OR表达式。如果结果已经确定,则短路是不再评估布尔表达式的过程。
如果使用短路AND,如果找到FALSE,则布尔操作会提前停止。如果使用短路OR,如果找到TRUE,则布尔操作会提前停止。
例如,在Java中:
a || b
是一个短路的OR
a | b
是非短路的OR
a && b
是一个短路的AND
a & b
是非短路的AND
有些人可能会问,“为什么我会使用非短路的AND或OR?”当你调用一个返回你想在每种情况下运行的布尔值的函数时,会出现这种情况。例如,a() | b()
将运行函数a和函数b。如果a返回false,则a() || b()
仅运行函数b。
答案 1 :(得分:1)
我认为在vba中也可以使用OrElse。
'或'(按位比较)总是完成语句的其余部分,'OrElse'(逻辑比较)在满足要求时停止。 在C ++,C#和Java中你可以使用'|'和'||'。
例如if object is null Or object.value = ""
由于尝试从空对象访问字段而导致对象为空时将导致空异常。
使用OrElse,当评估空对象时,评估if object is null OrElse object.value = ""
将在第一次比较时停止。