If
根据条件返回两个值之一,仅评估返回的分支。If是twinBASIC新增项;在VBA中,最接近的等价物是IIf,它始终评估两个分支。
语法:
- If( expression , truepart , falsepart )
- If( expressiontruepart , falsepart )
- expression
- 必需 为其真值评估的表达式。可以是任何可转换为Boolean的表达式。
- truepart
- 必需 当expression为True时返回的值或表达式。在三参数形式中,仅当expression为True时才评估。
- falsepart
- 必需 当expression为False,或expressiontruepart为Null、Empty或Nothing时返回的值或表达式。仅在实际需要时评估。
- expressiontruepart
- 必需(在两参数形式中)同时作为测试和"已设置"时返回值的表达式。函数返回expressiontruepart,除非它为Null、Empty或Nothing对象引用,在这种情况下返回falsepart。适用于空值合并——例如
If(MaybeNothing, FallbackValue)。
三参数形式是内联条件:当expression为True时返回truepart,否则返回falsepart,仅评估所选分支。这使得诸如If(Divisor <> 0, 100 / Divisor, "n/a")的表达式即使Divisor为零也是安全的。
INFO
If在编译器中使用特殊的内部绑定,可能不像常规函数那样运行——特别是Application.Run "If", ...和其他反射调用者不会调用它。
示例
vb
Dim Divisor As Long
Divisor = 0
' Three-argument form — short-circuits, so the division never happens when Divisor = 0.
Dim Result As Variant
Result = If(Divisor <> 0, 100 / Divisor, "n/a") ' "n/a"
' Two-argument form — null-coalescing.
Dim MaybeName As Variant
MaybeName = Null
Debug.Print If(MaybeName, "Anonymous") ' "Anonymous"
MaybeName = "Alice"
Debug.Print If(MaybeName, "Anonymous") ' "Alice"