IIF
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgIif
- 最后更新: 2023-06-30
返回两个值之一的条件函数。
语法
IIf ( condition, expr_if_true, expr_if_false )参数
condition
要测试的条件。
非零值被视为真,零值被视为假。
expr_if_true
当 condition 为真时求值并返回的表达式。
它必须返回:
- 数值,可以是整数、浮点数或指针,包括 Boolean,
- 或字符串值,
- 或 UDT 值。
expr_if_false
当 condition 为假时求值并返回的表达式。
它必须与 expr_if_true 的类型相同(均为数值、字符串或 UDT)。
返回值
如果 condition 为非零,则返回 expr_if_true,否则返回 expr_if_false。
描述
IIf 根据在运行时求值的条件表达式的结果,返回不同的数值、字符串或 UDT 值(而非引用)。
其典型用途是在表达式中间使用;它避免了为在中间放置条件而拆分表达式。
IIf 只对它需要返回的表达式进行求值。这节省了时间,也有助于防止对可能因 condition 而无效的表达式进行求值。
当 IIf 处理混合数值类型的表达式时(在运行时求值的条件表达式):
- 如果至少有一个表达式是浮点类型,结果类型就是浮点类型(如果两个都是浮点类型,则取较大的那个),
- 如果两个表达式都是整数类型,结果类型是两者中较大的类型(关于整数类型的精确排名,请参阅 强制转换与转换)。
注意:如果条件求值可以在编译时完成(如果比较表达式是常量),则使用规则会更灵活一些,IIf 例如可以返回引用,甚至可以返回函数调用(但不能是 sub 调用)。
示例
start GeSHi
vb
Dim As Integer a, b, x, y, z
a = (x + y + IIf(b > 0, 4, 7)) \ zend GeSHi
等价于:
start GeSHi
vb
Dim As Integer a, b, x, y, z, temp
If b > 0 Then temp = 4 Else temp = 7
a = (x + y + temp) \ zend GeSHi
start GeSHi
vb
Dim As Integer I
I = -10
Print I, IIf(I>0, "positive", IIf(I=0, "null", "negative"))
I = 0
Print I, IIf(I>0, "positive", IIf(I=0, "null", "negative"))
I = 10
Print I, IIf(I>0, "positive", IIf(I=0, "null", "negative"))
Sleepend GeSHi
start GeSHi
vb
Type UDT1
Dim As Integer I1
End Type
Type UDT2 Extends UDT1
Dim As Integer I2
End Type
Dim As UDT1 u1, u10 = (1)
Dim As UDT2 u2, u20 = (2, 3)
u1 = IIf(0, u10, u20)
Print u1.I1
u1 = IIf(1, u10, u20)
Print u1.I1
u2 = IIf(0 , u10, u20)
Print u2.I1; u2.I2
'u2 = Iif(1, u10, u20) ''Invalid assignment/conversion
Sleepend GeSHi
方言差异
- 在 -lang qb 方言中不可用,除非通过别名
__Iif引用。
与 QB 的差异
- FreeBASIC 新增功能
参见
If...Then
返回 目录