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

#शून्य?, #खाली?, #रिक्त?, और #वर्तमान के बीच अंतर?

रूबी और रेल की कई विधियाँ हैं जिनका उपयोग किसी मूल्य या वस्तु की स्थिति के अस्तित्व की जाँच के लिए किया जा सकता है। रूबी #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 दें।


  1. सु, सूडो सु, सूडो-एस और सूडो-आई के बीच अंतर

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

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

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

  1. Spotify और Apple Music के बीच 6 अंतर

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