分享

IF与IIF的区别比较

 nxhujiee 2010-04-14
IF与IIF的区别比较
作者:Larry Nung    来源:Level Up     更新时间:2009-11-17

前段去书店看书,找到一本写得不错的VB.Net入门书籍。翻动了一下,虽然书籍本身为入门教程,但书中有篇提到了If函式却给我启发,使用VB.NET到現在也已經一年多了,一直以為If就只能當陳述式用,看了書上描述才知道原來也有類似IIf的用法。

但若是If跟IIf功用完全一樣的話,又為何要有兩道函式呢?書上做了些許的比较,主要的区别是If的效率會比IIf好,也就是會比較快。

其用法與說明簡列如下:

image 

image

image

 

 

 

 

 

 

基本上If三個參數的多載函式用法幾乎跟IIf一樣,硬要說有啥不同的話,大概只有兩點,第一點差異就是If的後兩個參數需能互相擴展轉換(也許說成相同型態會更為恰當,這邊採用Visual Studio說明的說法),所以像下圖的寫法就會跑出錯誤。

image

而IIf無此限制,因此像下圖這樣寫法就無錯誤出現。

image

第二點差異就是If前面需有變數去接收函式回傳值,若前面無變數去接收回傳值,Visual Studio會將它視為是If陳述式,因此會出現如下錯誤:

image

同樣的IIf無此限制,因此不會出現錯誤,最多只能算是沒啥意義的寫法。

image

 

接著我們順便來看一下If兩個參數的多載函式的用法,簡單來說該函式的用法就是當第一個參數不為Nothing,該函式的回傳值就為第一個參數,反之若第一個參數為Nothing,該函式的回傳值就為第二個參數。看個簡單的範例,假設今天我們宣告了一個TextBox如下:

Dim tbx As TextBox = Nothing

 

若是這樣宣告,則當我們要使用該TextBox時會需要去判斷TextBox是否是Nothing,若是,我們會去New出TextBox物件,我們寫的Code可能會長的像下面這樣:

If tbx Is Nothing Then tbx = New TextBox

 

若此時運用If函式的話,寫法大概如下:

tbx = If(tbx, New TextBox)

 

 

了解了用法以後,我們當然不能錯過比較兩者之間速度上的差異,畢竟這是兩者最大的不同點。為了測試我們撰寫如下的測試程式:

 

 

    Private Sub TestIfAndIIf(ByVal loopCount As Integer)
        Dim sw As New Stopwatch
        Dim o As Object
 
        Console.WriteLine("Test If")  '更多.net源码和教程,来自[乐博网 www.lob.cn]
        sw.Start()
        For i As Integer = 1 To loopCount
            o = If(True, True, False)
        Next
        Console.WriteLine("花費時間: " & sw.ElapsedMilliseconds)
        sw.Reset()
 
        Console.WriteLine("Test IIf")
        sw.Start()
        For i As Integer = 1 To loopCount
            o = IIf(True, True, False)
        Next
        Console.WriteLine("花費時間: " & sw.ElapsedMilliseconds)
    End Sub

 

 

 

測試比较結果如下:

loopCountIfIIf
100000 ms0 ms
1000001 ms3 ms
100000010 ms32 ms
10000000101 ms326 ms

 

可以清楚的看出兩者間速度的比約為 1:3,不過這是當使用很多次的情況之下,在使用次數小於100000次的情況下,其間速度的差異幾乎可忽略不計。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多