2012-10-24 50 views
1

使用IIfIf更具性能优势吗?VB6 IIf优势

除了简单的代码更少...之间有什么区别:

If msInitialFloodSection <> Trim$(cboFloodSection.Text) Then 
    mbFloodSectionChanged = True 
Else 
    mbFloodSectionChanged = False 
End If 

mbFloodSectionChanged = IIf(msInitialFloodSection <> Trim$(cboFloodSection.Text), True, False) 
+2

另外:为简洁起见,我个人更喜欢'mbFloodSectionChanged = msInitialFloodSection <>修剪$(cboFloodSection.Text)' –

+1

同意。对于布尔表达式,这就是我所做的。这不是一个完美的例子! – aserwin

+0

编写_readable_代码是程序员的工作。编译器的工作是编译_optimised_的代码。 –

回答

10

IIf不是运营商或语言结构,它是一个函数,就像任何其他功能如Left。因此它会在任何时候评估它的所有参数,而If只会评估正确的分支。

实施例:

denominator = 0 
value = IIf(denominator = 0, 0, value/denominator) 

尽管存在对分母为零一个单独的分支这将提高Divizion by zero错误。

关于性能,它带给我们的是包装你的价值观为变体将需要额外的蜱,没有那么多可言,但如果我们对性能,那么If会更快,因为它不会通过强制的东西变量,因为它只会计算其中一个值,而不是两个。

+0

这就是我想知道的......我知道在VB6中没有“短路”,但我担心也许'IIf'有点反作用!似乎是这样吗? – aserwin

+3

@aserwin排序是;我不会从紧密的循环中调用它。但是对于一般的一次性任务,就像你在问题中展示的那样,我倾向于使用'IIf',因为它看起来更好,而且性能损失几乎不存在。 – GSerg