Skip to content

运算符 ORELSE(短路包含析取)


返回两个数值的短路或(包含析取)

语法

` declare operator OrElse ( byref lhs as T1, byref rhs as T2 ) as Ret

`

用法

` result = lhs OrElse rhs

`

参数

lhs

左侧表达式。

T1

任意数值或布尔类型。

rhs

右侧表达式。

T2

任意数值或布尔类型。

Ret

数值或布尔类型(随 T1T2 变化)。

返回值

返回两个操作数的短路或(包含析取)结果。

描述

该运算符先对左侧表达式求值。如果结果非零,则立即返回 -1(true)。如果结果为零,则对右侧表达式求值,并返回其逻辑结果——非零值返回 -1(true),零值返回 0(false)。

(对于布尔值转换为整数,false 或 true 的布尔值变为 0 或 -1 的整数值)

下方真值表展示了短路或运算的所有组合,"-"表示该操作数不被求值。

左侧值右侧值结果
000
0非零-1
非零(不求值)-1

OrElse 等价于:

Iif( Lhs = 0, Rhs <> 0 , -1 )

执行短路求值——只对计算结果所需的表达式求值。先对左侧 lhs 求值,只有当其求值为零(false)时才对右侧 rhs 求值。如果左侧 lhs 求值结果非零(true),则在该点已知整体条件为 true,因此不对右侧 rhs 求值(跳过)。

返回类型几乎总是 Integer,值为 0-1,分别表示 false 和 true。只有当左侧和右侧类型都是 Boolean 时,返回类型才也是 Boolean

该运算符不能为用户自定义类型重载。

示例

start GeSHi

vb
'' Using the ORELSE operator to test
'' if a value is out of range

Dim As Integer n
Input "Enter a number between 1 and 10: ", n

Function test(ByVal n As Integer) As Integer
    Print "expression evaluated"
    Return n
End Function

'' print value only if n is in range [1, 10]
If test(n) `< 1 OrElse test(n) >` 10 Then  '' if n < 1, second expression is not evaluated
    Print "   => out of range"
Else
    Print "   => n ="; n
End If
Sleep

end GeSHi

与 QB 的差异

  • 该运算符在 QB 中不可用。

参见

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系