Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी और रेल्स को समझना: कब उपयोग करें #nil?, #empty?, #blank?, और #present?

रूबी और रेल्स में कई मेथड्स हैं जिनका उपयोग किसी मान के अस्तित्व या ऑब्जेक्ट की स्थिति की जांच के लिए किया जा सकता है। रूबी #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?
5falseNoMethodErrorfalsetrue
""falsetruetruefalse
" "falsefalsetruefalse
"\t\n"falsefalsetruefalse
[]falsetruetruefalse
["a"]falsefalsefalsetrue
{}falsetruetruefalse
{a: "b"}falsefalsefalsetrue
Set.newfalsetruetruefalse
niltrueNoMethodErrortruefalse
truefalseNoMethodErrorfalsetrue
falsefalseNoMethodErrortruefalse

हर चीज की तरह, #nil?, #empty?, #blank? और #present? के बीच चयन स्थिति पर निर्भर करता है। उदाहरण के लिए, यह जांचने के लिए कि क्या किसी यूज़र के पास उन्हें संबोधित करने के लिए नाम है, #present? एक अच्छा फिट हो सकता है। हालांकि #blank? और #present सभी ऑब्जेक्ट्स के लिए बूलियन लौटाते हैं, जो गलत टाइप के मान होने पर एरर न उठाकर कोड में बग्स को छिपा सकते हैं।

हमें उम्मीद है कि हमने रूबी में मानों की जांच पर आपकी याददाश्त ताज़ा कर दी। यदि आपके कोई प्रश्न या टिप्पणियां हैं, तो @AppSignal पर हमें एक लाइन लिखने में संकोच न करें।

  1. Su, Sudo Su, Sudo -s और Sudo -i के बीच अंतर Su, Sudo Su, Sudo -s और Sudo -i के बीच अंतर

    लिनक्स टर्मिनल में रूट सेशन प्राप्त करने के कई अलग-अलग तरीके हैं। यह कुछ भ्रम पैदा कर सकता है, क्योंकि रूट विशेषाधिकार प्राप्त करने की तलाश में अधिकांश शुरुआती यूजर्स इस बात से परिचित नहीं हो सकते हैं कि प्रत्येक कमांड रूट एक्सेस कैसे प्राप्त कर सकती है, वे कैसे भिन्न हैं और ये अंतर कब मायने रखते है

  1. बिटकॉइन और एथेरियम के बीच अंतर बिटकॉइन और एथेरियम के बीच अंतर

    2017 निश्चित रूप से क्रिप्टोकरेंसी का वर्ष था, और भले ही उनकी कीमत अब गिर गई हो, लेकिन प्रमुख मुद्राओं में रुचि कम नहीं हुई है। दो सबसे लोकप्रिय मुद्राएं - बिटकॉइन और एथेरियम - ने वर्ष के दौरान कीमत में भारी वृद्धि देखी - क्रमशः $1,000 से कम से लगभग $20,000 और $10 से कम से $1,300 से अधिक तक। यदि आप

  1. Spotify बनाम Apple Music: 6 प्रमुख अंतर समझाए गए Spotify बनाम Apple Music: 6 प्रमुख अंतर समझाए गए

    अगर आप संगीत सुनना पसंद करते हैं, तो आप शायद उन कई संगीत स्ट्रीमिंग प्लेटफॉर्म से परिचित होंगे जो मौजूद हैं। इनमें से दो सबसे लोकप्रिय हैं Spotify और Apple Music। इन प्लेटफॉर्म के साथ, आप सब्सक्रिप्शन ले सकते हैं जो आपको प्रत्येक के विशाल संगीत लाइब्रेरी तक असीमित पहुंच प्रदान करता है। हालांकि, इन द