Skip to content

IIF


返回两个值之一的条件函数。

语法

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)) \ z

end 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) \ z

end 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"))
Sleep

end 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
Sleep

end GeSHi

方言差异

  • -lang qb 方言中不可用,除非通过别名 __Iif 引用。

与 QB 的差异

  • FreeBASIC 新增功能

参见

  • If...Then

返回 目录

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