रूबी और रेल की कई विधियाँ हैं जिनका उपयोग किसी मूल्य या वस्तु की स्थिति के अस्तित्व की जाँच के लिए किया जा सकता है। रूबी #nil?
. प्रदान करता है और #empty?
, और रेल का ActiveSupport #blank?
. जोड़ता है और #present?
. ये सभी अपने तरीके से काम करते हैं और यह जानना महत्वपूर्ण है कि प्रत्येक डेटा का मूल्यांकन कैसे करता है क्योंकि आपके कोड में गलत तरीके का उपयोग करने से अप्रत्याशित परिणाम हो सकते हैं।
इस लेख में, हम इन विधियों पर आपके ज्ञान को ताज़ा करेंगे। हम (फिर से) सीखेंगे कि जब प्रत्येक का उपयोग किया जाता है तो कौन सी स्थितियां गुजरती हैं या विफल होती हैं और साथ ही प्रत्येक विधि का उपयोग किस प्रकार की वस्तुओं पर किया जा सकता है। हम अंत में एक आसान चीट शीट भी देंगे!
#शून्य?
#nil?
Object
. पर एक रूबी विधि है कक्षा। चूंकि सभी वर्ग इस वर्ग से विरासत में मिले हैं, #nil?
किसी भी वस्तु पर प्रयोग किया जा सकता है। यह true
लौटाता है nil
. के लिए (कक्षा का एक उदाहरण NilClass
) और बाकी सब के लिए झूठा।
nil.nil?
=> true
true.nil?
=> false
5.nil?
=> false
"".nil?
=> false
[].nil?
=> false
#खाली?
#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?
# make use of my_var
end
रेल का उपयोग करने का एक बेहतर तरीका होगा #blank?
विधि, जिसे अब हम देखेंगे।
#रिक्त?
#blank?
एक रेल विधि है (ActiveSupport में)। यह किसी भी वस्तु पर कार्य करता है।
स्ट्रिंग्स के लिए, यह 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
यह false
लौटाता है true
. के लिए और true
किसी भी झूठी स्थिति के लिए (यानी nil
और false
)।
true.blank?
=> false
false.blank?
=> true
nil.blank?
=> true
जैसा कि आप देख सकते हैं, #blank?
. का उपयोग करना बेहतर है के बजाय #empty?
डेटा को मान्य करने में क्योंकि यह NoMethodErrors
. का कारण नहीं बनेगा जब कुछ वस्तुओं पर प्रयोग किया जाता है क्योंकि यह सभी वस्तुओं के लिए उपलब्ध है। यह उन स्ट्रिंग्स के लिए भी पास नहीं होगा जिनमें केवल व्हाइटस्पेस होता है।
#वर्तमान?
#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 दें।