रूबी ने यह defined?
कीवर्ड जो यह जांचने में आपकी सहायता करता है कि कोई चर परिभाषित है या नहीं।
यदि चर मौजूद है तो आपको उसका प्रकार मिल जाएगा :
apple = 1 defined?(apple) # "local-variable"
यदि ऐसा नहीं होता है तो आपको शून्य मिलेगा :
defined?(bacon) # nil
यह Javascript के typeof
. जैसा है ऑपरेटर। यदि आप किसी वस्तु के वर्ग को जानना चाहते हैं तो class
. का उपयोग करें इसके बजाय विधि।
ध्यान देने योग्य कुछ दिलचस्प बिंदु:
defined?
एक कीवर्ड है , नहीं एक विधिdefined?
रूबी में कुछ चीजों में से एक है जो एक प्रश्न चिह्न में समाप्त होता है, लेकिन सामान्य परंपरा का पालन नहीं करता हैtrue
याfalse
defined?
शून्य मान और वेरिएबल के बीच अंतर बता सकता है जो पहले कभी सेट नहीं किया गया है
ये विशेष विशेषताएं इस कीवर्ड को सीखने लायक बनाती हैं।
परिभाषित चर की जांच करने का एक बेहतर तरीका
यह कीवर्ड उपयोगी हो सकता है, लेकिन इसमें कुछ समस्याएं हैं।
क्यों?
इसकी कम ऑपरेटर वरीयता . के कारण ।
अगर आप ऐसा कुछ करते हैं:
defined? orange && orange.size
परिणाम "अभिव्यक्ति" है।
क्योंकि orange && orange.size
defined?
. के तर्क के रूप में व्याख्या की गई है ।
ऐसा करने का सही तरीका होगा:
defined?(orange) && orange.size
रूबी के पास यह जांचने के अन्य तरीके हैं कि कोई चर परिभाषित किया गया है या नहीं।
स्थानीय चर के लिए :
local_variables.include?(:orange)
उदाहरण के लिए चर :
instance_variable_defined?("@food")
लेकिन आप उनमें से किसी का भी उपयोग नहीं करना चाहते।
99% मामलों में, यदि कोई स्थानीय चर गायब है, तो आपके पास एक टाइपो है या कोई व्यक्ति उस चर को घोषित करना भूल गया है।
आवृत्ति चर के बारे में क्या?
अपरिभाषित आवृत्ति चर हमेशा nil
होते हैं , इसलिए आप इसकी जांच करना चाहते हैं।
"सुरक्षित नेविगेटर ऑपरेटर" (रूबी 2.3+) आज़माएं जो केवल एक विधि को कॉल करता है यदि चर nil
नहीं है ।
यहां एक उदाहरण दिया गया है :
if @user&.country == "Spain" # ... end
यह इसके बराबर है :
if @user && @user.country == "Spain" # ... end
ये उतने सार्वभौमिक नहीं हैं जितने defined?
कीवर्ड, लेकिन वे अधिक अनुमानित और त्रुटियों के प्रति कम प्रवण होते हैं।
जांचें कि कोई विधि परिभाषित है या नहीं
आप defined?
. का उपयोग कर सकते हैं यह जांचने के लिए कि क्या कोई विधि परिभाषित है, लेकिन यह व्यावहारिक नहीं है।
उदाहरण :
defined?(puts) # "method"
क्योंकि यह एक कीवर्ड है और एक तरीका नहीं है, आप इसे किसी ऑब्जेक्ट के साथ उपयोग नहीं कर सकते।
मेरा यही मतलब है :
[].defined?(:size) # undefined method `defined?' for []:Array
आप respond_to?
. की तलाश कर रहे हैं विधि।
यहां इसका उपयोग करने का तरीका बताया गया है :
[].respond_to?(:size) # true [].respond_to?(:orange) # false
जांचें कि कोई कक्षा मौजूद है या नहीं
उदाहरण :
defined?(Object) # "constant" defined?(A) # nil
एक बेहतर विकल्प const_defined?
. का उपयोग करना है विधि।
इसे पसंद करें :
Object.const_defined?(:String) # true Object.const_defined?(:A) # false
सारांश
वहाँ आप जाते हैं, आपने यह जांचने का एक आसान तरीका सीखा है कि क्या कोई चर, वर्ग या विधि मौजूद है!
वेरिएबल के साथ काम करते समय आप ज्यादातर समय nil
. की जांच करना चाहते हैं , इसके बजाय एक चर परिभाषित किया गया है या नहीं। या इससे भी बेहतर, एक रूपांतरण विधि का उपयोग करके चर को एक ज्ञात वर्ग में परिवर्तित करें।
मुझे आशा है कि आपको यह लेख उपयोगी लगा होगा! अगर आपने किया है तो कृपया साझा करें ताकि अधिक से अधिक लोग इसका आनंद उठा सकें।