VB.NET में, के बीच अंतर क्या है And
और AndAlso
? मुझे कौन सा उपयोग करना चाहिए?
VB.NET में, के बीच अंतर क्या है And
और AndAlso
? मुझे कौन सा उपयोग करना चाहिए?
जवाबों:
And
ऑपरेटर दोनों पक्षों, मूल्यांकन करता है जहां AndAlso
मूल्यांकन करता दाईं ओर यदि और केवल यदि बाईं ओर सच है।
एक उदाहरण:
If mystring IsNot Nothing And mystring.Contains("Foo") Then
' bla bla
End If
ऊपर एक अपवाद फेंकता है अगर mystring = Nothing
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
' bla bla
End If
यह एक अपवाद नहीं है।
इसलिए यदि आप C # दुनिया से आते हैं, तो आपको इसका उपयोग करना चाहिए AndAlso
जैसे आप उपयोग करेंगे &&
।
यहां अधिक जानकारी: http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orel//
Then
यह स्वयं का कीवर्ड है।
And
ऑपरेटर, आगे बढ़ने से पहले बयान में सभी शर्तों की जाँच जबकि andalso ऑपरेटर अगर यह जानता हालत झूठी है बंद हो जाएगा होगा। उदाहरण के लिए:
if x = 5 And y = 7
जाँच करता है कि क्या x 5 के बराबर है, और यदि y 7 के बराबर है, तो जारी है यदि दोनों सत्य हैं।
if x = 5 AndAlso y = 7
अगर x 5 के बराबर है तो चेक करता है। यदि यह नहीं है, तो यह जांच नहीं करता है कि क्या y 7 है, क्योंकि यह जानता है कि स्थिति पहले से ही झूठी है। (इसे शॉर्ट-सर्क्युटिंग कहा जाता है।)
आम तौर पर लोग शॉर्ट-सर्कुलेटिंग विधि का उपयोग करते हैं यदि कोई कारण स्पष्ट रूप से दूसरे भाग की जांच नहीं करना है यदि पहला भाग सत्य नहीं है, जैसे कि अगर यह जाँच की जाए तो अपवाद को फेंक देगा। उदाहरण के लिए:
If Not Object Is Nothing AndAlso Object.Load()
यदि And
इसके बजाय इसका उपयोग किया जाता है AndAlso
, तो यह तब भी प्रयास Object.Load()
करेगा यदि यह थे nothing
, जो एक अपवाद को फेंक देगा।
and
/ or
जब तक कि उनके पास कोई कारण न हो - जिनमें से मुझे लगता है कि वैध लोग कम और बहुत दूर हैं। निश्चित रूप से डिफ़ॉल्ट रूप से अधिकांश अन्य भाषाओं में शॉर्ट-सर्किट का कारण होता है: यह परिणाम की भावना को बनाए रखता है, जबकि संभावित रूप से महंगी अभिव्यक्तियों का मूल्यांकन नहीं करते हैं जब वे कुछ भी योगदान नहीं करते हैं। स्थितियों में साइड-इफेक्ट्स का प्रभाव होना चाहिए, ठीक है, साइड-आईड। लेकिन यह सिर्फ मेरी राय है ...
दिलचस्प बात यह है जवाब में से कोई भी उल्लेख किया है कि And
और Or
VB.NET में जबकि सा ऑपरेटर हैं OrElse
और AndAlso
सख्ती से बूलियन ऑपरेटरों हैं।
Dim a = 3 OR 5 ' Will set a to the value 7, 011 or 101 = 111
Dim a = 3 And 5 ' Will set a to the value 1, 011 and 101 = 001
Dim b = 3 OrElse 5 ' Will set b to the value true and not evaluate the 5
Dim b = 3 AndAlso 5 ' Will set b to the value true after evaluating the 5
Dim c = 0 AndAlso 5 ' Will set c to the value false and not evaluate the 5
नोट : एक गैर शून्य पूर्णांक माना जाता है true
; प्रदर्शन Dim e = not 0
करने के e
लिए सेट भी एक बिट ऑपरेटर है।-1
Not
||
और &&
(सी # के संस्करणों OrElse
और AndAlso
) पिछले का मूल्यांकन अभिव्यक्ति जो होगा लौटने 3
और 5
क्रमशः। यह आपको मुहावरा उपयोग करने देता है v || 5
सी # में देने के लिए 5
जब अभिव्यक्ति के मूल्य के रूप में v
है null
या ( 0
और एक पूर्णांक) और का मान v
अन्यथा। शब्दार्थ का अंतर VB.NET के गार्ड में C # प्रोग्रामर डब्बलिंग को पकड़ सकता है क्योंकि यह "डिफ़ॉल्ट मान मुहावरा" VB.NET में काम नहीं करता है।
तो, प्रश्न का उत्तर देने के लिए : बिट ऑपरेशंस (पूर्णांक या बूलियन) का उपयोग करें Or
और करें And
। का प्रयोग करें OrElse
और AndAlso
"शॉर्ट सर्किट" एक ऑपरेशन के लिए समय बचाने के लिए, या यह मूल्यांकन करने के लिए पहले एक मूल्यांकन की वैधता का परीक्षण करने के लिए। If valid(evaluation) andalso evaluation then
याif not (unsafe(evaluation) orelse (not evaluation)) then
बोनस: निम्नलिखित का मूल्य क्या है?
Dim e = Not 0 And 3
||
और &&
साथ हैं ??
। जबकि ऐसी भाषाएं हैं जहां ||
गैर-गलत मूल्य वापस आ जाएंगे, C # उनमें से एक नहीं है, और एक रिटर्न देता है bool
(हटाए गए अशक्त ऑपरेटरों को छोड़कर, जहां आपको एक Nullable<bool>
परिणाम मिलता है )
If Bool1 And Bool2 Then
बूल 1 और बूल 2 दोनों का मूल्यांकन करता है
If Bool1 AndAlso Bool2 Then
बूल 2 का मूल्यांकन करता है यदि और केवल बूल 1 सच है।
बस उन सभी लोगों के लिए जो साइड इफेक्ट कहते हैं, वे बुराई हैं: एक ऐसी जगह जहां एक ही स्थिति में दो साइड इफेक्ट्स होना अच्छा होता है, दो फाइल ऑब्जेक्ट्स को अग्रानुक्रम में पढ़ना होगा।
While File1.Seek_Next_Row() And File2.Seek_Next_Row()
Str1 = File1.GetRow()
Str2 = File2.GetRow()
End While
का उपयोग And
सुनिश्चित एक पंक्ति हर बार हालत की जाँच कर रहा है सेवन किया जाता है कि। जबकि AndAlso
अंतिम पंक्ति को पढ़ सकते हैं File1
और File2
बिना उपभोग की रेखा के छोड़ सकते हैं।
बेशक कोड ऊपर काम नहीं करेगा, लेकिन मैं हर समय इस तरह के साइड इफेक्ट्स का उपयोग करता हूं और इसे " बुरा " या " बुराई " कोड नहीं मानूंगा क्योंकि कुछ आपको विश्वास करने के लिए प्रेरित करेंगे। यह पढ़ने में आसान और कुशल है।
AndAlso बहुत पसंद है और, सिवाय इसके कि यह & # C, C ++, आदि में && काम करता है।
अंतर यह है कि यदि पहला क्लॉज (एंडलास से पहले वाला) सच है, तो दूसरे क्लॉज का मूल्यांकन कभी नहीं किया जाता है - यौगिक तार्किक अभिव्यक्ति "शॉर्ट सर्कुलेटेड" है।
यह कभी-कभी बहुत उपयोगी होता है, जैसे कि अभिव्यक्ति में:
If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
...
End If
पुराने का उपयोग करना और उपरोक्त अभिव्यक्ति में एक NullReferenceException फेंक देगा यदि myObj शून्य थे।
स्टैक ओवरफ्लो प्रश्न भी देखें: क्या मुझे हमेशा एंडो और ऑर्लस ऑपरेटरों का उपयोग करना चाहिए? ।
इसके अलावा: उन लोगों के लिए एक टिप्पणी जिनका उपयोग करके उल्लेख किया And
गया है कि अभिव्यक्ति के दाईं ओर एक साइड-इफेक्ट है जिसकी आपको आवश्यकता है:
यदि दाईं ओर के साइड इफेक्ट की आपको आवश्यकता है, तो बस "और" का उपयोग करने के बजाय इसे बाईं ओर ले जाएं। आपको केवल "एंड" की आवश्यकता है यदि दोनों पक्षों पर दुष्प्रभाव हैं। और अगर आपके पास है कि कई साइड इफेक्ट्स चल रहे हैं तो आप शायद कुछ और गलत कर रहे हैं। सामान्य तौर पर, आपको वास्तव में एंडलासो को पसंद करना चाहिए।
ऊपर दिए गए उत्तरों के अलावा, AndAlso एक शॉर्ट सर्किटिंग के रूप में जानी जाने वाली एक कंडीशनिंग प्रक्रिया प्रदान करता है। कई प्रोग्रामिंग भाषाओं में यह कार्यक्षमता है जैसे vb.net करता है, और मूल्यांकन को अनावश्यक रूप से काटकर लंबी स्थिति के बयानों में पर्याप्त प्रदर्शन बढ़ा सकता है।
इसी तरह की एक और स्थिति ऑर्लेज़ स्थिति है जो केवल सही स्थिति की जांच करेगी यदि बाईं स्थिति झूठी है, इस प्रकार एक वास्तविक स्थिति पाए जाने के बाद अनावश्यक स्थिति की जाँच करना।
मैं आपको सलाह दूंगा कि आप हमेशा शॉर्ट सर्कुलेटिंग प्रक्रियाओं का उपयोग करें और अपने सशर्त बयानों को इस तरह से तैयार करें कि इससे सबसे ज्यादा फायदा हो सके। उदाहरण के लिए, अपनी सबसे कुशल और सबसे तेज़ स्थितियों का परीक्षण पहले करें ताकि आप केवल अपनी लंबी स्थितियों को चलाएं जब आपको दूसरी बार पूरी तरह से और शॉर्ट सर्किट करना पड़े।
हम में से अधिकांश के लिए OrElse और AndAlso कुछ भ्रमित करने वाले अपवादों को छोड़कर चाल करेंगे (1% से कम जहां हमें Or और And का उपयोग करना पड़ सकता है)।
कोशिश करें कि लोग अपने बूलियन लॉजिक्स को बंद न करें और इसे रॉकेट साइंस की तरह बनाएं।
यह काफी सरल और सीधे आगे है और कभी-कभी आपका सिस्टम उम्मीद के मुताबिक काम नहीं कर सकता है क्योंकि यह आपके तर्क को पहली जगह में पसंद नहीं करता है। और फिर भी आपका मस्तिष्क आपको बताता है कि उसका तर्क 100% परीक्षण और सिद्ध है और इसे काम करना चाहिए। उसी क्षण अपने मस्तिष्क पर भरोसा करना बंद कर दें और उसे फिर से सोचने के लिए कहें या नहीं (ओरलसे या शायद ऑर्लेसे) आप अपने आप को एक और नौकरी की तलाश करने के लिए मजबूर करते हैं जिसमें बहुत तर्क की आवश्यकता नहीं होती है।
केस का उपयोग करें:
"एंड" के साथ कंपाइलर सभी शर्तों की जांच करेगा, यदि आप जाँच रहे हैं कि कोई ऑब्जेक्ट "कुछ भी नहीं" हो सकता है और फिर आप इसमें से किसी एक गुण की जाँच कर रहे हैं तो आपके पास रन टाइम एरर होगा।
लेकिन पहले "झूठे" शर्तों के साथ एंडलासो के साथ यह अगले एक की जांच करेगा ताकि आपको कोई त्रुटि न हो।