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

सब कुछ जो आप नील के बारे में जानना चाहते हैं

शून्य…

यह वास्तव में क्या है?

खैर, nil एक विशेष रूबी वस्तु है जिसका उपयोग "खाली" या "डिफ़ॉल्ट" मान का प्रतिनिधित्व करने के लिए किया जाता है। यह एक "गलत" मान भी है, जिसका अर्थ है कि यह false . जैसा व्यवहार करता है जब एक सशर्त बयान में प्रयोग किया जाता है।

अब :

केवल एक nil है ऑब्जेक्ट, object_id . के साथ का 4 (या 8 64-बिट रूबी में), यही कारण है कि nil विशेष है।

nil.object_id
# 4

आइए गहराई से देखें!

शून्य मान कहां से आते हैं?

कई तरीके nil लौटा सकते हैं परिणामस्वरूप।

ऐसा तब होता है जब आप कोई मान मांगते हैं लेकिन वह मान उपलब्ध नहीं होता है।

उदाहरण :

  • उत्पाद नहीं मिला
  • सरणी अनुक्रमणिका सीमा से बाहर
  • हैश कुंजी मौजूद नहीं है

इसे प्रदर्शित करने के लिए यहां कुछ कोड दिया गया है :

arr = [1,2,3]

arr[5]
# nil

यह अक्सर सभी प्रकार की समस्याओं का कारण बनता है क्योंकि हम उम्मीद करते हैं कि जिस विधि को हमने बुलाया है वह nil के बजाय एक मान्य मान लौटाएगा। ।

इस तरह NoMethodError अपवाद:

arr[5].size

# NoMethodError: undefined method 'size' for nil:NilClass

इस त्रुटि से बचने के लिए, आपको यह जांचना होगा कि क्या आपके पास nil है value इससे पहले कि आप उस पर कोई विधि कॉल करें।

रूबी में शून्य के लिए परीक्षण

यदि आप "शून्य के लिए अपरिभाषित विधि:NilClass" त्रुटि प्राप्त नहीं करना चाहते हैं, तो इसे आज़माएं...

केवल कॉल विधि यदि शून्य नहीं है :

if array[5] && array[5].size
  # do something...
end

यही कारण है कि रूबी 2.3 ने "सुरक्षित नेविगेटर" ऑपरेटर पेश किया (&. )।

उदाहरण :

if arr[5]&.size
  # do something...
end

शून्य का परीक्षण करने का दूसरा तरीका nil? . का उपयोग करना है विधि:

if @bacon.nil?
  # ...
end

एक अन्य विकल्प blank? . का उपयोग करना है विधि (केवल रेल)।

आप जिस वस्तु के साथ काम कर रहे हैं, उसके आधार पर कुछ तकनीकें हैं जिनका उपयोग आप nil की जांच से बचने के लिए कर सकते हैं। पूरी तरह से मान।

उदाहरण के लिए, आप fetch . का उपयोग कर सकते हैं हैश और ऐरे ऑब्जेक्ट्स पर विधि।

या यदि आप nil के बजाय एक डिफ़ॉल्ट मान वापस करना चाहते हैं, तो आप अपनी कक्षाओं में "नल ऑब्जेक्ट पैटर्न" का उपयोग कर सकते हैं ।

अन्य स्थान जहां शून्य छिपा है

आपको पता होना चाहिए कि अपरिभाषित आवृत्ति चर nil लौटाएंगे ।

@foo

# nil

तो इसके लिए सावधान रहें, ऐसा हो सकता है कि आपने अपने आवृत्ति चर का नाम गलत लिखा हो या आप इसे प्रारंभ करना भूल गए हों!

एक अन्य स्थान जहाँ आप nil पा सकते हैं puts . के साथ है &print तरीके।

ये दो तरीके हमेशा nil लौटाते हैं ।

मैं इसका जिक्र इसलिए कर रहा हूं क्योंकि मैंने अपने कुछ छात्रों को कुछ इस तरह की कोशिश करते देखा है:

numbers = [1,2,3].map { |n| puts n * 2 }

जिसका परिणाम numbers . में होता है होने के नाते [nil, nil, nil] . इस मामले में समाधान केवल puts . को हटाना है ब्लॉक के अंदर से।

NilClass को समझना

किसी भी अन्य रूबी वस्तु की तरह nil विधियों का एक सेट है।

रुबिनियस से वर्ग परिभाषा यहां दी गई है:

class NilClass
  def to_s
    ""
  end

  def inspect
    "nil"
  end

  def nil?
    true
  end

  def to_a
    []
  end

  def to_f
    0.0
  end

  def to_i
    0
  end

  def to_c
    Complex(0)
  end

  def to_h
    {}
  end
end

ध्यान दें कि कैसे ये सभी to_something विधियाँ एक खाली मान लौटाती हैं (0 नंबरों के लिए)।

खाली हैश, खाली स्ट्रिंग, खाली सरणी…

इसका कारण यह है कि nil "कुछ नहीं" का प्रतिनिधित्व करने के लिए प्रयोग किया जाता है।

नल ऑब्जेक्ट पैटर्न

nil . के बारे में कोई चर्चा नहीं शून्य ऑब्जेक्ट पैटर्न का उल्लेख किए बिना पूरा हो गया है।

सैंडी मेट्ज़ ने अपने उत्कृष्ट भाषण "नथिंग इज समथिंग" में यह बात कही है कि nil इसका अर्थ है "कुछ नहीं" इसका अधिक विशिष्ट अर्थ हो सकता है।

उदाहरण के लिए, यदि हम एक ऐसा तरीका लिखते हैं जो उत्पादों को ढूंढता है और हम एक डिफ़ॉल्ट उत्पाद वापस करना चाहते हैं…

हम इस तरह एक अशक्त उत्पाद वापस कर सकते हैं :

class MissingProduct
  def name
    "Product not found"
  end
end

अब अगर हमारे पास वास्तविक उत्पाद वस्तुओं और अशक्त उत्पादों के मिश्रण के साथ एक सरणी है तो इन सभी उत्पादों में name होगा तरीका। इसका मतलब है कि आपको NoMethodError नहीं मिलेगा अपवाद।

<ब्लॉकक्वॉट>

युक्ति :यदि आप ऑब्जेक्ट प्रकार की जांच किए बिना अपनी सभी वस्तुओं को उसी तरह से व्यवहार कर सकते हैं तो आप बहुरूपता का लाभ उठा रहे हैं।

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

सच्चाई

nil के बारे में एक और बात जो आपको जाननी चाहिए क्या यह false . के अलावा एकमात्र मान है (जो एक वस्तु भी है), जिसे "झूठा" माना जाता है।

रूबी में बाकी सब कुछ true माना जाता है एक बूलियन संदर्भ में।

कुछ भाषाएं संख्या 0 . पर विचार करती हैं false . के रूप में मूल्य, लेकिन रूबी में ऐसा नहीं है:

if 0
  puts 123
end

# 123

यह कह रहा है:"अगर 0 क्या true है फिर प्रिंट करें 123 ".

वीडियो

सारांश

आपने सीखा कि nil सिर्फ एक रूबी वस्तु है जो "कुछ नहीं" का प्रतिनिधित्व करती है।

आपने यह भी सीखा कि nil &false रूबी में केवल दो चीजें हैं जो "झूठी" हैं। बाकी सब कुछ "सत्य" है।

अगर आपको यह पोस्ट अच्छी लगी हो तो शेयर करना न भूलें इसे अपने पसंदीदा सामाजिक नेटवर्क पर!


  1. सब कुछ जो आपको जानना आवश्यक है:GDPR

    फेसबुक उपयोगकर्ता के डेटा के कैम्ब्रिज एनालिटिका के दुरुपयोग ने दुनिया भर में लाखों लोगों का ध्यान आकर्षित किया। इसने लोगों को पहले से कहीं अधिक डेटा गोपनीयता और डेटा सुरक्षा के महत्व का एहसास कराया। डेटा गोपनीयता और सुरक्षा के बारे में बढ़ती जांच के बारे में लोगों के बहुत चिंतित होने के साथ। यूरोपी

  1. ब्लूटूथ 5

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

  1. पीबीएम फ़ाइल के बारे में वह सब कुछ जो आपको जानना चाहिए?

    जब से कंप्यूटर पहुंच योग्य हो गए हैं, आप प्रौद्योगिकी और मनोरंजन के क्षेत्र में ध्यान देने योग्य वृद्धि देख सकते हैं। मनोरंजन के सबसे आम स्रोतों में से एक आपकी तस्वीरें और अन्य मीडिया हैं। हालाँकि, वर्तमान तकनीक आपको किसी विशिष्ट उपकरण को खोलने के लिए सही प्रोग्राम चुनने के लिए परेशान नहीं करती है ज