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

रूबी में परिवर्तनीय दायरे और बाध्यकारी वस्तुओं को समझना

स्कोप सभी रूबी डेवलपर्स के लिए समझने के लिए एक महत्वपूर्ण अवधारणा है।

क्यों?

क्योंकि यह कई त्रुटि संदेशों और भ्रम का स्रोत है।

स्कोप क्या है?

स्कोप से तात्पर्य है कि किसी भी समय में कौन से चर उपलब्ध हैं।

अलग-अलग तरह के वेरिएबल के अलग-अलग स्कोप होते हैं।

एक दायरा बहुत संकीर्ण (स्थानीय चर) . हो सकता है या बहुत व्यापक (वैश्विक चर)

आप राज्य उत्परिवर्तन और नाम टकराव के साथ समस्याओं से बचने के लिए जितना संभव हो सके संकीर्ण दायरे का उपयोग करना चाहते हैं।

उदाहरणों . की सूची इस प्रकार है दायरा आपके रूबी कोड को कैसे प्रभावित करता है।

स्थानीय चर क्षेत्र

एक स्थानीय चर का दायरा सबसे संकीर्ण होता है।

विशेष रूप से, विधियों के अंदर परिभाषित स्थानीय चर अब विधि के वापस आने के बाद मौजूद नहीं रहेंगे।

यहां एक उदाहरण दिया गया है :

a = 50

def apple
  a = 100

  puts a
end

आपको क्या लगता है apple प्रिंट होगा?

ये रहा जवाब :

जब आप apple call को कॉल करते हैं यह हमेशा 100 प्रिंट करेगा ।

तथ्य यह है कि a विधि के बाहर परिभाषित किया गया है 50 . के रूप में a . पर कोई प्रभाव नहीं पड़ता चर विधि के अंदर

वे भिन्न चर हैं।

आप स्कोप को साबुन के बुलबुले के रूप में सोच सकते हैं

यह पहला a = 50 . है एक बुलबुले में है, फिर जब आप किसी विधि, किसी भी विधि को कॉल करते हैं, तो आप एक नया EMPTY बबल दर्ज करते हैं।

आप नए बबल के ऊपर कोई स्थानीय चर नहीं लाते हैं।

और जब विधि अंत तक पहुंच जाए…

बुलबुला फूटता है।

बबल के अंदर के वेरिएबल गायब हो जाते हैं और आप उन तक नहीं पहुंच सकते।

इस तरह स्थानीय चर काम करते हैं।

इंस्टेंस वैरिएबल स्कोप

इंस्टेंस वैरिएबल का दायरा व्यापक होता है।

विशेष रूप से, उनका उपयोग रूबी ऑब्जेक्ट के अंदर डेटा साझा करने के लिए किया जाता है।

यहां एक उदाहरण दिया गया है :

class Fruit
  def more_juice
    @quantity = 100
  end

  def less_juice
    @quantity = 50
  end
end

इस उदाहरण में, @quantity more_juice . दोनों के लिए एक ही वैरिएबल है &less_juice तरीके।

यह विधियों के बीच एक साझा मूल्य है।

लेकिन इस वर्ग के बाहर, और यहां तक ​​कि विभिन्न Fruit . पर भी ऑब्जेक्ट्स, @quantity अलग होने जा रहा है।

उदाहरण :

orange = Fruit.new
apple  = Fruit.new

orange.more_juice
apple.less_juice

प्रत्येक वस्तु का आवृत्ति चर का अपना सेट होता है।

तो इस उदाहरण में, orange एक @quantity होने वाला है 100 में से, और apple एक @quantity होने वाला है 50 में से।

जैसे अलग-अलग व्यक्तियों के अलग-अलग नाम, उम्र, देश आदि होते हैं।

स्कोप कैसे ब्लॉक में काम करता है

जब दायरे की बात आती है तो ब्लॉक बहुत दिलचस्प होते हैं।

अगर हम फिर से अपने बबल सादृश्य का अनुसरण करते हैं, तो एक ब्लॉक क्या करता है मौजूदा बबल से स्थानीय चर लाना

आप उन्हें एक्सेस कर सकते हैं और बदल सकते हैं।

उदाहरण :

a = []

3.times { a << 1 }

p a
# [1, 1, 1]

लेकिन...

बबल अभी भी पॉप होता है, ब्लॉक के अंदर बनाए गए किसी भी नए स्थानीय चर को हटा देता है।

क्या यह दिलचस्प नहीं है?

यहां मेरा मतलब का एक उदाहरण दिया गया है :

1.times { b = [1,2,3] }

b
# NameError

इतना ही नहीं, बल्कि ब्लॉक अपने साथ बुलबुले को भी ले जाएंगे, जिस बिंदु पर वे बनाए गए थे।

एक प्रभाव जिसे "क्लोजर" कहा जाता है

याद रखें, यह "बुलबुला" उन सभी चरों का एक संग्रह है, जिन्हें स्रोत कोड में एक विशिष्ट बिंदु पर एक्सेस किया जा सकता है।

यह एक वस्तु के रूप में समझाया गया दायरा ही है।

हम इसे Binding कहते हैं रूबी में।

रूबी बाइंडिंग का उपयोग कैसे करें

इस लेख में मैं आपके साथ एक और अवधारणा साझा करना चाहता हूं जो बाइंडिंग के बारे में है।

आप इन सभी बुलबुले को सहेज सकते हैं जिनके बारे में हम रूबी ऑब्जेक्ट में बात कर रहे हैं, Binding की एक वस्तु कक्षा।

उदाहरण :

def banana
  a = 100

  binding
end

banana.class
# Binding

यह बाध्यकारी वस्तु बुलबुला है।

आप बुलबुले में भी देख सकते हैं और देख सकते हैं कि वहां क्या है।

उदाहरण :

banana.send(:local_variables)
# [:a]

रेल स्कोप के बारे में क्या?

रूबी में स्कोप की तुलना में रेल में एक स्कोप एक अलग चीज है।

तो, रेल में क्या गुंजाइश है?

यह एक कस्टम डेटाबेस क्वेरी को नाम देने का एक तरीका है, जो ActiveRecord . से बना है तरीके।

यहां एक उदाहरण दिया गया है :

class User < ApplicationRecord
  scope(:with_email) { where.not(email: nil) }
end

User.with_email

रूबी में दायरे की अवधारणा के साथ इसे भ्रमित न करें

सारांश

आपने रूबी में स्कोप और बाइंडिंग ऑब्जेक्ट्स के बारे में सीखा है!

याद रखें कि स्कोप परिभाषित करता है कि आप किन चरों तक पहुंच सकते हैं किसी भी समय पर।

यह एक बुलबुले की तरह है, स्थानीय चरों के अपने बुलबुले होते हैं, जबकि वस्तुएं उदाहरण चर के लिए एक और बुलबुला साझा करती हैं।

पढ़ने के लिए धन्यवाद।


  1. रूबी में इंसर्शन सॉर्ट को समझना

    नोट:रूबी के साथ विभिन्न सॉर्टिंग एल्गोरिदम को लागू करने पर विचार करने वाली श्रृंखला में यह भाग 4 है। भाग 1 ने बबल सॉर्ट की खोज की, भाग 2 ने चयन प्रकार की खोज की, और भाग 3 ने मर्ज सॉर्ट की खोज की। जैसा कि हम डेटा सॉर्ट करने के लिए विभिन्न तरीकों का पता लगाना जारी रखते हैं, हम इंसर्शन सॉर्ट की ओर रु

  1. रूबी में पर्यावरण चर का उपयोग कैसे करें?

    पर्यावरण चर एक कुंजी/मान युग्म है, यह इस तरह दिखता है: KEY=VALUE हम आपके कंप्यूटर के सभी प्रोग्रामों के बीच कॉन्फ़िगरेशन विकल्पों को साझा करने के लिए इन चरों का उपयोग करते हैं। इसलिए यह सीखना महत्वपूर्ण है कि वे कैसे काम करते हैं और ENV का उपयोग करके अपने रूबी कार्यक्रमों से उन्हें कैसे एक्सेस क

  1. रूबी फ्रीज विधि - वस्तु परिवर्तनशीलता को समझना

    किसी वस्तु के परिवर्तनशील होने का क्या अर्थ है? फैंसी शब्दों को भ्रमित न होने दें, “परिवर्तनशीलता ” का सीधा सा मतलब है कि किसी वस्तु की आंतरिक स्थिति को बदला जा सकता है। जमे हुए . को छोड़कर, यह सभी वस्तुओं का डिफ़ॉल्ट है , या वे जो विशेष वस्तुओं की सूची का हिस्सा हैं। दूसरे शब्दों में, रूबी में सभ