वीबी (ए) में पैंथेस नियम के लिए सही तर्क है, और यह इस तरह से चला जाता है।
यदि किसी प्रक्रिया (फ़ंक्शन या उप) को तर्क के साथ बुलाया जाता है, और कॉल अन्य कथन या कीवर्ड के साथ एक पंक्ति पर है, तो तर्क कोष्ठक में संलग्न होना चाहिए। यह शेष रेखा से प्रक्रिया कॉल से संबंधित तर्कों को अलग करने के लिए। तो:
1: If CheckConditions(A, B, C) = DONT_PROCEED Then Exit Sub
एक वैध रेखा है; चेककंडिशन के लिए कॉल को इंगित करने के लिए कोष्ठक की आवश्यकता होती है कि लाइन के अन्य बिट्स इसके तर्क हैं। इसके विपरीत, यह एक वाक्यविन्यास त्रुटि उत्पन्न करेगा:
2: If CheckConditions A, B, C = DONT_PROCEED Then Exit Sub
क्योंकि पार्स करना असंभव है।
लाइन पर केवल बयान के रूप में एक प्रक्रिया कॉल के साथ
, कोष्ठक की जरूरत नहीं है, क्योंकि यह स्पष्ट है कि तर्क प्रक्रिया कॉल से संबंधित हैं:
3: SaveNewValues Value1, Value2, Value3
इस सिंटैक्स त्रुटि में परिणाम है (के लिए ध्वनि कारणों नीचे चर्चा):
4: SaveNewValues(Value1, Value2, Value3)
कोष्ठक या कोई कोष्ठकों (वास्तव में के बारे में भ्रम की स्थिति से बचने के लिए कोष्ठक नियम पूरी तरह से बचने के लिए), यह हमेशा एक अच्छा विचार इस तरह की कॉल के लिए कॉल कीवर्ड का उपयोग करने के लिए है; कोष्ठक
5: Call SaveNewValues(Value1, Value2, Value3)
तो अगर आप आत्म निहित प्रक्रिया पूर्ववर्ती करने की आदत डालना कॉल कीवर्ड के साथ कहता है, तुम भूल कर सकते हैं: कि कि प्रक्रिया कॉल लाइन पर केवल बयान, नहीं है इस प्रकार की आवश्यकता होती है कोष्ठकों सुनिश्चित करता है नियम, क्योंकि आप हमेशा अपने तर्कों को कोष्ठक में संलग्न कर सकते हैं।
इस मामले को वीबी (ए) (और कई अन्य भाषाओं) में अतिरिक्त भूमिका कोष्ठक द्वारा भ्रमित किया जाता है: वे अभिव्यक्तियों के लिए मूल्यांकन प्राथमिकता भी इंगित करते हैं। यदि आप किसी भी अन्य संदर्भ में ब्रांड्स का उपयोग करते हैं लेकिन प्रक्रिया कॉल तर्क संलग्न करने के लिए, वीबी (ए) को परिणामी सरल मान के लिए कोष्ठक में अभिव्यक्ति का मूल्यांकन करने का प्रयास करेगा।
इस प्रकार, उदाहरण में 4, जहां तर्कों को घेरने के लिए ब्रांड्स अवैध हैं, वीबी (ए) इसके बजाय कोष्ठक में अभिव्यक्ति का मूल्यांकन करने का प्रयास करेगा। चूंकि (वैल्यू 1, वैल्यू 2, वैल्यू 3) एक अभिव्यक्ति नहीं है जिसका मूल्यांकन किया जा सकता है, एक वाक्यविन्यास त्रुटि उत्पन्न होती है।
यह भी बताता है कि बायरफ को पारित करने वाले चर के साथ कॉल क्यों किया जाता है यदि तर्क कोष्ठक में संलग्न किया गया है।
6: p a
और
जैसा कि ऊपर चर्चा, 6 सही है: ऊपर के उदाहरण है, जहां समारोह पी ByRef पैरामीटर एक साथ कहा जाता है, वहाँ पी करने के लिए इन दो कॉल के बीच एक बड़ा अंतर है वाक्यविन्यास: कॉल अपनी रेखा पर अकेला है, इसलिए तर्कों को घेरने के लिए ब्रांड्स का उपयोग नहीं किया जाना चाहिए।
7 में, तर्क किसी भी तरह से कोष्ठक में संलग्न है, जिससे वीबी (ए) को एक सरल मूल्य पर संलग्न अभिव्यक्ति का मूल्यांकन करने के लिए प्रेरित किया जाता है। निश्चित रूप से ByVal पास करने की बहुत परिभाषा है। कोष्ठक सुनिश्चित करते हैं कि एक पॉइंटर के बजाय, एक का मान पास हो गया है, और एक को अनमोडिफाइड छोड़ दिया गया है।
यह भी बताता है कि क्यों ब्रांड्स नियम हमेशा प्रभावित नहीं होता है।
8: MsgBox "Hello World!"
और
9: MsgBox ("Hello World!")
दोनों सही हैं, भले ही कोष्ठकों नियम तय है कि 9 गलत किया जाना चाहिए: स्पष्ट उदाहरण एक MsgBox कॉल है। यह निश्चित रूप से है, लेकिन ऐसा होता है कि वीबी (ए) कोष्ठक में अभिव्यक्ति का मूल्यांकन करता है। और स्ट्रिंग शाब्दिक सटीक समान स्ट्रिंग का मूल्यांकन करता है, ताकि वास्तविक कॉल 8 हो। दूसरे शब्दों में: स्थिर या स्ट्रिंग शाब्दिक तर्कों के साथ एकल-तर्क प्रक्रियाओं को कॉल करने के साथ समान परिणाम होते हैं या बिना किसी कोष्ठक के होते हैं। (यही कारण है कि मेरे MsgBox कॉल भी कॉल कीवर्ड द्वारा पहले हैं।)
अंत में, ऑब्जेक्ट तर्कों को पार करते समय यह अजीब टाइप मिस्चैच त्रुटियों और अजीब व्यवहार को बताता है। आइए मान लें कि आपके एप्लिकेशन में हाइलाइट कंटेंट प्रक्रिया है जो टेक्स्टबॉक्स को तर्क के रूप में लेती है (और, आप कभी अनुमान नहीं लगाएंगे, इसे सामग्री को हाइलाइट करते हैं)। आप टेक्स्टबॉक्स में सभी टेक्स्ट का चयन करने के लिए इसे कॉल करते हैं। आप तीन वाक्य रचना सही मायनों में इस प्रक्रिया कॉल कर सकते हैं:
10: HighlightContent txtName
11: HighlightContent (txtName)
12: Call HighlightContent(txtName)
मान लें कि आपका उपयोगकर्ता पाठ बॉक्स में "जॉन" में प्रवेश किया है और आपके आवेदन HighlightContent कॉल करते हैं। क्या होगा, कौन सी कॉल काम करेगी?
10 और 12 सही हैं; जॉनबॉक्स को टेक्स्टबॉक्स में हाइलाइट किया जाएगा। लेकिन 11 वाक्य रचनात्मक रूप से सही है, लेकिन परिणामस्वरूप संकलन या रनटाइम त्रुटि होगी। क्यूं कर? क्योंकि कोष्ठक जगह से बाहर हैं। इससे वीबी (ए) को कोष्ठक में अभिव्यक्ति के मूल्यांकन का प्रयास करने के लिए संकेत मिलेगा। और किसी ऑब्जेक्ट के मूल्यांकन का नतीजा अक्सर इसकी डिफ़ॉल्ट संपत्ति का मूल्य होगा; इसके अलावा, इस मामले में। इसलिए 11 की प्रक्रिया को कॉल करने से टेक्स्टबॉक्स ऑब्जेक्ट को प्रक्रिया में पास नहीं किया जाएगा, लेकिन एक स्ट्रिंग मान "जॉन" होगा। एक टाइप मिस्चैच में परिणाम। -
यहाँ इस विषय पर मेरी पसंदीदा पोस्ट: http://dailydoseofexcel.com/archives/2012/05/01/quick-vba-tip-parentheses/ –