2012-10-24 142 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