इस लेख में, आप अपने प्रोग्राम के निष्पादन के प्रवाह को नियंत्रित करने के लिए गार्ड स्टेटमेंट का उपयोग करना सीखेंगे।
स्विफ्ट यदि स्टेटमेंट बताता है कि आप कुछ शर्त (बूलियन वैल्यू) के आधार पर कैसे कार्य कर सकते हैं। इस लेख में, अगर हम कार्यक्रम प्रवाह को नियंत्रित करने और अधिक सरल और साफ कोड लिखने के लिए बयान पर गार्ड स्टेटमेंट के लाभों का पता लगाएंगे।
स्विफ्ट गार्ड स्टेटमेंट
गार्ड स्टेटमेंट का मुख्य उपयोग प्रोग्राम कंट्रोल को कुछ शर्तों पर एक दायरे से बाहर स्थानांतरित करना है। ये कथन उसी तरह के हैं जैसे कि ऐसे कथन जो कुछ शर्त (बूलियन वैल्यू) के आधार पर बयानों को निष्पादित करते हैं लेकिन यदि इसके विपरीत, गार्ड स्टेटमेंट केवल तभी चलते हैं जब कुछ शर्तों को पूरा नहीं किया जाता है।
इसके अलावा, गार्ड के अंदर के बयानों को दायरे से बाहर होना चाहिए। इसलिए, हम उपयोगकर्ता कार्यक्रम नियंत्रण बयान करने के लिए है return
, break
, continue
या throw
गार्ड बयान के अंत में।
गार्ड स्टेटमेंट का सिंटैक्स
गार्ड एक्सप्रेशन (// स्टेटमेंट्स // में एक कंट्रोल स्टेटमेंट होना चाहिए: रिटर्न, ब्रेक, कंटीन्यू या थ्रो।)
- यहां, अभिव्यक्ति एक बूलियन अभिव्यक्ति है (
true
या तो रिटर्नfalse
) या । - यदि अभिव्यक्ति का मूल्यांकन किया जाता है
false
, तो कोड ब्लॉक के अंदर कथनोंguard
को निष्पादित किया जाता है। - यदि अभिव्यक्ति का मूल्यांकन किया जाता है
true
, तो कोड ब्लॉक के अंदर के स्टेटमेंट्सguard
को निष्पादन से छोड़ दिया जाता है।
गार्ड का बयान कैसे काम करता है?
नोट: गार्ड बयान के अंत में एक नियंत्रण वक्तव्य होना चाहिए return
, break
, continue
या throw
।
उदाहरण 1: गार्ड स्टेटमेंट कैसे काम करता है?
एक साधारण वैध गार्ड विवरण नीचे दिया गया है:
guard true else ( print("Condition not met") ) print("Condition met")
जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:
शर्त पूरी की
उपरोक्त कार्यक्रम में, गार्ड में एक बूलियन मूल्य सच होता है (स्थिति पूरी की जाती है)। चूंकि, गार्ड के बयान केवल तभी चलते हैं जब शर्त पूरी नहीं की जाती है, गार्ड के अंदर बयान निष्पादित नहीं किया जाता है। यही कारण print("Condition met")
है कि क्रियान्वित किया जाता है और आउटपुट की स्थिति स्क्रीन पर मिलती है ।
अब इस स्थिति को असत्य में बदल दें:
उदाहरण 2: गार्ड स्टेटमेंट के दायरे से बाहर निकलना है
guard false else ( print("Condition not met") ) print("Condition met")
उपरोक्त कार्यक्रम में, गार्ड की स्थिति का मूल्यांकन करता है false
। इसलिए, print("Condition not met")
बाकी के बयान को निष्पादित करना चाहिए। लेकिन आपको यह कहते हुए एक त्रुटि मिलेगी कि 'गार्ड' बॉडी के माध्यम से नहीं गिर सकता है, इस दायरे से बाहर निकलने के लिए 'रिटर्न' या 'थ्रो' का उपयोग करने पर विचार करें।
सरल शब्द का अर्थ है में त्रुटि संदेश, आप गार्ड बयान का उपयोग करने से कार्यक्रम नियंत्रण स्थानांतरित करने की आवश्यकता return
, break
, continue
या throw
बयान। अभी के लिए हम उपयोग करने जा रहे हैं return
। और चूंकि return
कथन का उपयोग केवल एक फ़ंक्शन के अंदर किया जा सकता है, हम स्विफ्ट फ़ंक्शंस में कोड से ऊपर लपेटने जा रहे हैं।
उदाहरण 3: किसी फ़ंक्शन के अंदर गार्ड स्टेटमेंट
हम स्विफ्ट में एक फ़ंक्शन में अंदर गार्ड स्टेटमेंट का उपयोग कर सकते हैं:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
जब आप उपरोक्त कार्यक्रम चलाते हैं, तो आउटपुट होगा:
फ़ंक्शन कॉल के बाद हैलो से मुलाकात नहीं की गई
उपरोक्त कार्यक्रम में, गार्ड की स्थिति का मूल्यांकन करता है false
, इसलिए गार्ड के अंदर के बयान निष्पादित होते हैं। पहला कथन print("Condition not met")
आउटपुट कंसोल में नहीं मिला है।
और स्टेटमेंट return
किसी फ़ंक्शन के निष्पादन को समाप्त करता है और print("Hello, after function call")
फ़ंक्शन कॉल के बाद स्टेटमेंट को कंसोल में फ़ंक्शन कॉल के बाद हैलो को आउटपुट करता है।
उदाहरण 4: वैकल्पिक के साथ गार्ड
हमने स्विफ्ट ऑप्शनल में देखा है if-let
एक वैकल्पिक को खोलना। हालांकि, हम if-let
एक लाभ के साथ एक वैकल्पिक अलिखित के लिए गार्ड स्टेटमेंट का उपयोग भी कर सकते हैं । इसके बजाय गार्ड के साथ एक वैकल्पिक अलॉट करने का मुख्य लाभ यह है if-let
कि हम अलिखित चर का दायरा बढ़ा सकते हैं।
आइए इसे नीचे दिए गए उदाहरण में देखें:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
जब आप उपरोक्त कार्यक्रम चलाते हैं, तो आउटपुट होगा:
नाम है नील। प्रक्रिया नहीं कर सकते
उपरोक्त कार्यक्रम में, आप देख सकते हैं कि गार्ड स्टेटमेंट द्वारा परिभाषित दायरे से बाहर अलिखित मान का उपयोग किया जा रहा है। चूंकि, नाम को वैकल्पिक रूप से परिभाषित किया गया है और इसमें शून्य मान होता है, इसलिए गार्ड स्टेटमेंट मूल्य को खोलना विफल हो जाता है।
So, the statements inside guard else executes which prints Name is nil. Cannot process in the output and terminates the function with return
statement. The equivalent code of the above guard statement if-else statement is:
func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase()
Notice above two statements are both valid and does the same job. But using if-let statement you cannot use the unwrapped value outside of if-let statement. But with guard statement you can use the unwrapped value through out the function.
Example 5: Guard with multiple conditions
Guard statements can also chain multiple conditions separated by comma (,) as:
func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
When you run the above program, the output will be:
Name is nil or an empty string. Cannot process
In the above program ,the guard statement contains two conditions separated by comma.
पहली स्थिति let temp = name
एक वैकल्पिक को true
खोल देती है जो हमारे मामले में वापस आती है और दूसरी स्थिति temp.count> 0
यह जांचती है कि क्या अपरिवर्तित स्ट्रिंग में 0 से अधिक अक्षर हैं जो false
हमारे उदाहरण में मूल्यांकन करता है ।
इसलिए, गार्ड स्टेटमेंट के अंदर का स्टेटमेंट स्टेटमेंट को निष्पादित करता है, print("Name is nil or an empty string. Cannot process")
जो आउटपुट नाम शून्य या रिक्त स्ट्रिंग है। कंसोल में प्रक्रिया नहीं कर सकता और return
कथन के साथ फ़ंक्शन को समाप्त करता है ।