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

रूबी कॉन्स्टेंट्स के बारे में आपको जो कुछ पता होना चाहिए

रूबी में स्थिरांक क्या है?

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

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

वे इस तरह दिखते हैं :

FRUIT = "orange"

अब :

क्योंकि स्थिरांक एक महत्वपूर्ण विषय है, हम इस लेख में उनका विस्तार से पता लगाने जा रहे हैं!

स्थिरांक कैसे परिभाषित करें

एक स्थिरांक को घोषित करने के लिए किसी विशेष प्रतीक या वाक्य रचना की आवश्यकता नहीं होती है। आपको बस पहले अक्षर को बड़ा अक्षर बनाना है।

निम्न मान्य स्थिरांक हैं :

ABC = 1
Goo = 2
Foo = 3

ध्यान दें कि आप किसी विधि के अंदर स्थिरांक को परिभाषित नहीं कर सकते।

आपको यह गुप्त त्रुटि संदेश प्राप्त होगा :

def the_method
  ABC = 1
end

# "dynamic constant assignment"

तो बस अपने स्थिरांक बाहरी तरीकों को परिभाषित करें, आम तौर पर हम आपकी कक्षा के शीर्ष पर निरंतर परिभाषाएं रखना चाहते हैं ताकि वे स्पष्ट रूप से दिखाई दे सकें।

class RubyBlog
  URL    = "rubyguides.com"
  AUTHOR = "Jesus Castello"
end

फिर आप निम्न सिंटैक्स का उपयोग करके इन स्थिरांक को कक्षा विधियों के अंदर या कक्षा के बाहर एक्सेस कर सकते हैं:

p RubyBlog::AUTHOR

# "Jesus Castello"

हम इस पोस्ट में बाद में स्थिरांक के दायरे के बारे में कुछ और बात करने जा रहे हैं, इसलिए उसके लिए बने रहें!

अप्रारंभीकृत लगातार त्रुटि

एक सामान्य त्रुटि जो आपको मिल सकती है वह यह है:

puts Foo
# "uninitialized constant Foo (NameError)"

मैं चाहता हूं कि आप मानसिक रूप से इस त्रुटि का अनुवाद "निरंतर नहीं मिला" में करें।

इस त्रुटि को समझने के लिए एक महत्वपूर्ण बिंदु यह है कि रूबी कक्षाएं स्थिरांक हैं।

उदाहरण :

Array
String
Hash

वे स्थिरांक हैं क्योंकि पहला अक्षर अपरकेस है।

जब आप किसी वर्ग को परिभाषित करते हैं, तो आप वास्तव में एक Class बना रहे होते हैं ऑब्जेक्ट, जो एक स्थिरांक को असाइन किया गया है।

स्थिरांक वर्ग का नाम बन जाता है।

यह महत्वपूर्ण क्यों है?

क्योंकि सबसे संभावित कारण यह है कि आपको "अप्रारंभीकृत स्थिरांक" त्रुटि दिखाई दे रही है, क्योंकि आप require भूल गए हैं एक फ़ाइल या रत्न जो स्थिरांक को परिभाषित करता है।

या हो सकता है कि आपने केवल स्थिरांक के नाम की वर्तनी गलत कर दी हो।

तो उस पर नज़र रखें।

स्थिरांक बदल सकते हैं

जैसा कि मैंने परिचय में उल्लेख किया है, रूबी स्थिरांक बदल सकते हैं।

उदाहरण :

ABC = 1
ABC = 2

लेकिन आपको यह चेतावनी संदेश दिखाई देगा:

2: warning: already initialized constant ABC

आपका प्रोग्राम अभी भी ठीक काम करेगा, लेकिन आप इससे बचना चाहते हैं।

स्थिरांक को बदलने से रोकने का कोई तरीका नहीं है क्योंकि रूबी में चर कंटेनर नहीं हैं, वे केवल वस्तुओं की ओर इशारा करते हैं।

या लेबल, यदि आप चाहें तो।

अपरिवर्तनीय वस्तुओं का उपयोग करना सबसे अच्छा है।

उदाहरण :

AUTHOR = "Jesus Castello".freeze

AUTHOR << "o"
# RuntimeError: can't modify frozen String
<ब्लॉकक्वॉट>

संबंधित लेख :रूबी परिवर्तनशीलता और फ्रीज विधि।

इस उदाहरण में, आप अभी भी AUTHOR . को बदल सकते हैं निरंतर इंगित कर रहा है, केवल एक चीज freeze वस्तु को स्वयं बदलने से आपकी रक्षा करता है।

लगातार तरीके

स्थिरांक के साथ काम करने के लिए समर्पित कुछ विधियाँ हैं:

विधि विवरण
स्थिरांक एक वर्ग में परिभाषित स्थिरांक का प्रतिनिधित्व करने वाले प्रतीकों की एक सरणी देता है
const_get एक स्थिरांक का मान लौटाता है। एक प्रतीक या स्ट्रिंग को पैरामीटर के रूप में लेता है
const_set एक स्थिरांक के लिए मान सेट करता है। दो पैरामीटर लेता है:प्रतीक के रूप में स्थिर नाम और स्थिर मान
const_missing method_missing के समान लेकिन स्थिरांक के लिए
const_defined? यदि किसी दिए गए स्थिरांक (एक प्रतीक के रूप में) को परिभाषित किया गया है, तो यह सही है
remove_const एक स्थिरांक निकालता है
private_constant निरंतर निजी बनाता है ताकि इसे Class::ABC के साथ कक्षा के बाहर एक्सेस नहीं किया जा सके वाक्य रचना

इन विधियों का उपयोग करके आप कुछ मेटाप्रोग्रामिंग तरकीबें कर सकते हैं।

उदाहरण :

module Food
  class Bacon; end
  class Chocolate; end
end

puts "Classes defined inside #{Food}:"

puts Food.constants

इसके अलावा आप "ऐरे" जैसी स्ट्रिंग का उपयोग कर सकते हैं और वास्तविक वर्ग प्राप्त कर सकते हैं:

array_class = Object.const_get("Array")

लेकिन इसके साथ सावधान रहें क्योंकि यदि स्ट्रिंग params . से आ रही है तो उपयोगकर्ता कोड इंजेक्ट कर सकता है या उपयोगकर्ता इनपुट का कोई अन्य रूप।

रेल में, स्थिरीकरण विधि है जो मूल रूप से const_get . करती है आपके लिए, लेकिन ध्यान रखें कि यह कोई सुरक्षा जांच नहीं करता है।

चीटशीट

रूबी कॉन्स्टेंट्स के बारे में आपको जो कुछ पता होना चाहिए

रूबी कॉन्सटेंट स्कोप

जब आप अपने कोड के शीर्ष-स्तर पर किसी भी वर्ग के बाहर एक स्थिरांक बनाते हैं, तो वह स्थिरांक कहीं भी उपलब्ध होगा।

बाल कक्षाओं में स्थिरांक भी उपलब्ध हैं।

class A
  FOO = 1
end

class B < A
  def foo
    puts FOO
  end
end

B.constants

# [:FOO]
डालता है

नेस्टेड मॉड्यूल या वर्ग के बाहर परिभाषित स्थिरांक नेस्टेड कक्षाओं के अंदर भी उपलब्ध हैं।

module Food
  STORE_ADDRESS = "The moon"

  class Bacon
    def foo; puts STORE_ADDRESS; end
  end
end

fb = Food::Bacon.new
fb.foo

# "The moon"

मॉड्यूल मिक्सिंग

मिश्रित मॉड्यूल से स्थिरांक भी उपलब्ध हैं:

module Mixin
  A = 123
end

class Product
  include Mixin

  puts A
end

# 123

ध्यान दें कि मॉड्यूल को शामिल करते समय यह काम करता है, अगर आप इसे बढ़ा रहे हैं तो यह काम नहीं करेगा।

उदाहरण :

class Product
  extend Mixin

  puts A
end

#  uninitialized constant Product::A

भी :

जब आप किसी मॉड्यूल से शामिल की गई विधि का उपयोग करते हैं, तो रूबी स्थिरांक की तलाश करेगी जहां से उस विधि को परिभाषित किया गया है।

उदाहरण :

module Parent
  def print_value
    VALUE
  end
end

class Child
  include Parent

  VALUE = 1
end

# Works
p Child::VALUE

# uninitialized constant Parent::VALUE
p Child.new.print_value
शामिल है

कुछ ध्यान में रखना है!

मॉड्यूल नेस्टिंग

मैं आपको नेस्टेड कक्षाओं (मॉड्यूल के लिए समान) के साथ एक और उदाहरण दिखाना चाहता हूं।

class A
  FOO = 1
end

class A::B
  class C
    puts FOO
  end
end

A::B . पर ध्यान दें यहां संकेतन, जिसे हमने शॉर्टकट के रूप में उपयोग करने का प्रयास किया था। लेकिन समस्या यह है कि क्लास C FOO तक पहुंच नहीं होगी सीधे।

इस कारण से, आप इस प्रकार के नेस्टिंग से चिपके रहना चाहते हैं:

class A
  FOO = 1
end

class A
  class B
    class C
      puts FOO
    end
  end
end

पहले उदाहरण में, आप अभी भी ::A::FOO . कर सकते हैं स्थिरांक तक पहुँचने के लिए, लेकिन यदि वर्ग का नाम बदल जाता है तो आपको एक त्रुटि मिलेगी।

यह ::A::FOO सिंटैक्स काम करता है क्योंकि यह रूबी को शीर्ष-स्तरीय दायरे में देखने के लिए कहता है, जहां स्थिरांक जैसे Array और String परिभाषित हैं।

वीडियो

सारांश

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

आपने यह भी सीखा कि कक्षा के नाम स्थिरांक होते हैं और आपको const_get . से बचना चाहिए उपयोगकर्ता इनपुट के साथ।

अगर आपको यह पोस्ट अच्छी लगी हो तो इसे शेयर करना न भूलें ताकि और लोग समझ सकें कि स्थिरांक कैसे काम करते हैं।


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

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

  1. ब्लूटूथ 5

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

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

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