रूबी और रेल्स में कई मेथड्स हैं जिनका उपयोग किसी मान के अस्तित्व या ऑब्जेक्ट की स्थिति की जांच के लिए किया जा सकता है। रूबी #nil? और #empty? प्रदान करती है, और रेल्स का एक्टिवसपोर्ट #blank? और #present? जोड़ता है। ये सभी अपने तरीके से काम करते हैं और यह जानना महत्वपूर्ण है कि प्रत्येक कैसे डेटा का मूल्यांकन करता है क्योंकि आपके कोड में गलत मेथड का उपयोग करने से अप्रत्याशित परिणाम हो सकते हैं।
इस लेख में, हम इन मेथड्स पर आपके ज्ञान को ताज़ा करेंगे। हम (पुनः) सीखेंगे कि प्रत्येक का उपयोग करने पर कौन सी शर्तें पास या फेल होती हैं साथ ही ऑब्जेक्ट्स का टाइप जिस पर प्रत्येक मेथड का उपयोग किया जा सकता है। हम अंत में एक हैंडी चीट शीट भी डालेंगे!
#nil?
#nil? Object क्लास पर एक रूबी मेथड है। चूंकि सभी क्लासेस इस क्लास से इनहेरिट करती हैं, #nil? किसी भी ऑब्जेक्ट पर उपयोग किया जा सकता है। यह nil (क्लास NilClass का एक इंस्टेंस) के लिए true और बाकी सब चीजों के लिए false लौटाता है।
nil.nil? => true
true.nil? => false
5.nil? => false
"".nil? => false
[].nil? => false
#empty?
#empty? एक मेथड है जिसे स्ट्रिंग्स, ऐरे, हैश और सेट्स पर उपयोग किया जा सकता है। यह true लौटाता है अगर ऑब्जेक्ट के इंस्टेंस की लंबाई शून्य है।
स्ट्रिंग्स पर उपयोग किए जाने पर, यह खाली स्ट्रिंग्स के लिए true लौटाता है।
"".empty? => true
ध्यान दें कि व्हाइटस्पेस कैरेक्टर्स कैरेक्टर्स हैं इसलिए केवल व्हाइटस्पेस वाली स्ट्रिंग पर #empty? का उपयोग करने से false लौटेगा। इस वजह से, यह टेक्स्ट को मान्य करते समय उपयोग करने के लिए सबसे अच्छा मेथड नहीं हो सकता। यदि आप केवल उपयोगकर्ता इनपुट को मान्य करने के लिए इस मेथड का उपयोग कर रहे हैं, उदाहरण के लिए, आप केवल व्हाइटस्पेस वाले इनपुट को प्रोसेस कर सकते हैं।
" ".empty? => false
"\t\n".empty? => false
ऐरे, हैश और सेट्स के लिए, यह true लौटाता है अगर उनमें कोई एलिमेंट नहीं है।
[].empty? => true
{}.empty? => true
require 'set'
Set.new.empty? => true
जब #empty? का उपयोग nil या किसी अन्य क्लास पर किया जाता है जिसमें मेथड नहीं होता, तो NoMethodError एक्सेप्शन उठाया जाएगा। इसलिए अपने डेटा की जांच में इसका उपयोग करने के लिए, आपको यह सुनिश्चित करने के लिए और जांच करनी होगी कि आपका प्रोग्राम कभी क्रैश न हो।
if !my_var.nil? && !my_var.empty?
# my_var का उपयोग करें
end
उपयोग करने के लिए एक बेहतर मेथड रेल्स #blank? मेथड होगा, जिसे हम अब देखेंगे।
#blank?
#blank? एक रेल्स मेथड है (एक्टिवसपोर्ट में)। यह किसी भी ऑब्जेक्ट पर ऑपरेट करता है।
स्ट्रिंग्स के लिए, यह खाली स्ट्रिंग्स के साथ-साथ केवल व्हाइटस्पेस कैरेक्टर्स वाली स्ट्रिंग्स के लिए true लौटाएगा।
"".blank? => true
" ".blank? => true
"\n\t".blank? => true
ऐरे, हैश और सेट्स के लिए, यह #empty? की तरह ही काम करता है, जिसमें यह true लौटाता है अगर उनमें कोई एलिमेंट नहीं है।
[].blank? => true
{}.blank? => true
Set.new.blank? => true
[nil].blank? => false
["", ""].blank? => false
person = {:firstName => "John", :lastName => "Doe"}
person.blank? => false
यह true के लिए false और किसी भी फाल्सी कंडीशन्स (यानी nil और false) के लिए true लौटाता है।
true.blank? => false
false.blank? => true
nil.blank? => true
जैसा कि आप देख सकते हैं, डेटा को मान्य करने में #empty? के बजाय #blank? का उपयोग करना बेहतर है क्योंकि यह कुछ ऑब्जेक्ट्स पर उपयोग किए जाने पर NoMethodErrors का कारण नहीं बनेगा क्योंकि यह सभी ऑब्जेक्ट्स के लिए उपलब्ध है। यह केवल व्हाइटस्पेस वाली स्ट्रिंग्स के लिए भी पास नहीं होगा।
#present?
#present? भी एक रेल्स मेथड है। यह #blank? के विपरीत करता है।
!my_var.blank? == my_var.present? => true
यहां कुछ उदाहरण हैं:
"".present? => false
" ".present? => false
[].present? => false
nil.present? => false
true.present? => true
false.present? => false
{}.present? => false
person = {:firstName => "John", :lastName => "Doe"}
person.present? => true
5.present? => true
यह भी #empty? की तुलना में वैलिडेशन के लिए एक बेहतर मेथड है उन्हीं कारणों के लिए जिन्हें हमने #blank? के लिए कवर किया था।
निष्कर्ष
चूंकि इन मेथड्स के नामकरण से भ्रम होता है, यहां आपके लिए बुकमार्क करने के लिए एक हैंडी चीट शीट है।
#nil? | #empty? | #blank? | #present? | |
|---|---|---|---|---|
5 | false | NoMethodError | false | true |
"" | false | true | true | false |
" " | false | false | true | false |
"\t\n" | false | false | true | false |
[] | false | true | true | false |
["a"] | false | false | false | true |
{} | false | true | true | false |
{a: "b"} | false | false | false | true |
Set.new | false | true | true | false |
nil | true | NoMethodError | true | false |
true | false | NoMethodError | false | true |
false | false | NoMethodError | true | false |
हर चीज की तरह, #nil?, #empty?, #blank? और #present? के बीच चयन स्थिति पर निर्भर करता है। उदाहरण के लिए, यह जांचने के लिए कि क्या किसी यूज़र के पास उन्हें संबोधित करने के लिए नाम है, #present? एक अच्छा फिट हो सकता है। हालांकि #blank? और #present सभी ऑब्जेक्ट्स के लिए बूलियन लौटाते हैं, जो गलत टाइप के मान होने पर एरर न उठाकर कोड में बग्स को छिपा सकते हैं।
हमें उम्मीद है कि हमने रूबी में मानों की जांच पर आपकी याददाश्त ताज़ा कर दी। यदि आपके कोई प्रश्न या टिप्पणियां हैं, तो @AppSignal पर हमें एक लाइन लिखने में संकोच न करें।