2008-08-26 21 views
10

मैं हाल ही में एक प्रश्न के बारे में IIf vs. If पूछा और पता चला VB में एक और समारोह तो जो मूल रूप से के रूप में IIf एक ही बात करता है लेकिन एक शॉर्ट सर्किट है कहा जाता है कि वहाँ।हैं, तो IIf() और अगर()

इस तो समारोह IIf समारोह तुलना में बेहतर प्रदर्शन करता है? यदि कथन पर ट्रम्प करें तो और IIf फ़ंक्शंस?

उत्तर

14

अरे, मैंने वास्तव में सोचा था कि आप ऑपरेटर के बारे में बात कर रहे थे। ;-) वैसे भी ...

क्या यह फ़ंक्शन IIF फ़ंक्शन से बेहतर प्रदर्शन करता है?

निश्चित रूप से। याद रखें, यह भाषा में बनाया गया है। केवल दो सशर्त तर्कों में से एक का मूल्यांकन किया जाना चाहिए, संभावित रूप से महंगा संचालन को बचाया जा सकता है।

क्या अगर कथन if और IIf फ़ंक्शन को टंप करता है?

मुझे लगता है कि आप दोनों की तुलना नहीं कर सकते क्योंकि वे अलग-अलग चीजें करते हैं। यदि आपका कोड सैद्धांतिक रूप से असाइनमेंट करता है तो आपको निर्णय लेने की बजाय इसे ज़ोर देना चाहिए। कथन के बजाय यहां If ऑपरेटर का उपयोग करें। यह विशेष रूप से सच है अगर आप एक चर के प्रारंभ में इसका इस्तेमाल कर सकते हैं क्योंकि अन्यथा चर प्रारंभ डिफ़ॉल्ट होगा, धीमी कोड में जिसके परिणामस्वरूप:

Dim result = If(a > 0, Math.Sqrt(a), -1.0) 

' versus 

Dim result As Double ' Redundant default initialization! 
If a > 0 Then 
    result = Math.Sqrt(a) 
Else 
    result = -1 
End If 
1

एक बहुत महत्वपूर्ण IIf() और If() के बीच अलग है कि Option Infer On बाद में साथ निश्चित रूप से परिणाम कुछ मामलों में उसी डेटा प्रकार पर डालेगा, जहां IIfObject लौटाएगा।

उदाहरण:

Dim val As Integer = -1 
    Dim iifVal As Object, ifVal As Object 
    iifVal = IIf(val >= 0, val, Nothing) 
    ifVal = If(val >= 0, val, Nothing) 

आउटपुट:
iifVal और कुछ भी नहीं है का मूल्य वस्तु के प्रकार
ifVal, पूर्णांक के 0 के मूल्य और प्रकार है b/c यह परोक्ष एक पूर्णांक के लिए कुछ भी नहीं है परिवर्तित किया जाता है।