রুবিতে একটি ধ্রুবক কি?
একটি ধ্রুবক হল এক ধরনের পরিবর্তনশীল যা সর্বদা একটি বড় অক্ষর দিয়ে শুরু হয়। সেগুলিকে শুধুমাত্র বাইরে সংজ্ঞায়িত করা যেতে পারে৷ পদ্ধতির, যদি না আপনি মেটাপ্রোগ্রামিং ব্যবহার করেন।
ধ্রুবকগুলি এমন মানগুলির জন্য ব্যবহৃত হয় যা পরিবর্তন করার কথা নয়, কিন্তু রুবি আপনাকে সেগুলি পরিবর্তন করতে বাধা দেয় না৷
এগুলি দেখতে এরকম৷ :
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 এড়ানো উচিত ব্যবহারকারীর ইনপুট সহ।
আপনি যদি এই পোস্টটি উপভোগ করেন তাহলে এটি শেয়ার করতে ভুলবেন না৷ যাতে আরও বেশি মানুষ বুঝতে পারে কিভাবে ধ্রুবক কাজ করে।