Ruby के पास यह defined? कीवर्ड है जो आपको यह जांचने में मदद करता है कि कोई वेरिएबल परिभाषित है या नहीं।
यदि वेरिएबल मौजूद है तो आपको उसका प्रकार मिलेगा:
apple = 1 defined?(apple) # "local-variable"
यदि नहीं है तो आपको nil मिलेगा:
defined?(bacon) # nil
यह Javascript के typeof ऑपरेटर की तरह है। यदि आप किसी ऑब्जेक्ट की क्लास जानना चाहते हैं तो इसके बजाय class मेथड का उपयोग करें।
ध्यान देने योग्य कुछ दिलचस्प बिंदु:
defined?एक कीवर्ड है, मेथड नहींdefined?Ruby की उन कुछ चीजों में से एक है जो प्रश्न चिह्न पर समाप्त होती है, लेकिनtrueयाfalseवापस करने के सामान्य कन्वेंशन का पालन नहीं करतीdefined?एक nil मान और एक वेरिएबल के बीच अंतर बता सकता है जिसे कभी सेट नहीं किया गया है
ये विशेष गुण इस कीवर्ड को सीखने लायक बनाते हैं।
परिभाषित वेरिएबल्स की जांच का एक बेहतर तरीका
यह कीवर्ड उपयोगी हो सकता है, लेकिन इसकी कुछ समस्याएं हैं।
क्यों?
इसके कम ऑपरेटर प्रीसिडेंस के कारण।
यदि आप ऐसा कुछ करते हैं:
defined? orange && orange.size
परिणाम "expression" होगा।
क्योंकि orange && orange.size को defined? का आर्गुमेंट माना जाता है।
इसे करने का सही तरीका होगा:
defined?(orange) && orange.size
Ruby के पास यह जांचने के अन्य तरीके हैं कि कोई वेरिएबल परिभाषित किया गया है या नहीं।
स्थानीय वेरिएबल्स के लिए:
local_variables.include?(:orange)
इंस्टेंस वेरिएबल्स के लिए:
instance_variable_defined?("@food")
लेकिन आप उनमें से किसी का भी उपयोग नहीं करना चाहते।
99% मामलों में, यदि कोई स्थानीय वेरिएबल गायब है तो आपके पास टाइपो है या किसी ने उस वेरिएबल को घोषित करना भूल गया है।
इंस्टेंस वेरिएबल्स के बारे में क्या?
अपरिभाषित इंस्टेंस वेरिएबल्स हमेशा nil होते हैं, इसलिए आप इसकी जांच करना चाहते हैं।
"सेफ नेविगेटर ऑपरेटर" आज़माएं (Ruby 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 हैं या नहीं, बजाय इसके कि वे परिभाषित हैं या नहीं। या इससे भी बेहतर, वेरिएबल को एक ज्ञात क्लास में परिवर्तित करने के लिए रूपांतरण मेथड का उपयोग करें।
मुझे उम्मीद है कि आपको यह लेख उपयोगी लगा! यदि हां तो कृपया साझा करें ताकि अधिक लोग इसका आनंद ले सकें।