সকল রুবি ডেভেলপারদের জন্য স্কোপ একটি গুরুত্বপূর্ণ ধারণা।
কেন?
কারণ এটি অনেক ত্রুটির বার্তা এবং বিভ্রান্তির উৎস।
স্কোপ কি?
স্কোপ বলতে বোঝায় কোন নির্দিষ্ট সময়ে কোন ভেরিয়েবল পাওয়া যায়।
বিভিন্ন ধরণের ভেরিয়েবলের বিভিন্ন সুযোগ রয়েছে।
একটি সুযোগ খুব সংকীর্ণ (স্থানীয় ভেরিয়েবল) হতে পারে অথবা খুব প্রশস্ত (গ্লোবাল ভেরিয়েবল) .
আপনি রাষ্ট্রের মিউটেশন এবং নামের সংঘর্ষের সমস্যা এড়াতে সম্ভাব্য সংকীর্ণ সুযোগ ব্যবহার করতে চান।
নিম্নলিখিত উদাহরণগুলির একটি তালিকা৷ কিভাবে সুযোগ আপনার রুবি কোড প্রভাবিত করে।
স্থানীয় পরিবর্তনশীল সুযোগ
একটি স্থানীয় ভেরিয়েবলের সবচেয়ে সংকীর্ণ সুযোগ রয়েছে৷
৷বিশেষত, পদ্ধতির অভ্যন্তরে সংজ্ঞায়িত স্থানীয় ভেরিয়েবল পদ্ধতিটি ফিরে আসার পরে আর বিদ্যমান থাকবে না।
এখানে একটি উদাহরণ আছে :
a = 50 def apple a = 100 puts a end
আপনি কি মনে করেন apple
প্রিন্ট করবে?
এখানে উত্তর আছে :
যখন আপনি apple
কল করেন এটি সর্বদা 100
প্রিন্ট করবে .
সত্য যে a
পদ্ধতির বাইরে সংজ্ঞায়িত করা হয় 50
হিসাবে a
-এর উপর কোন প্রভাব নেই পরিবর্তনশীল পদ্ধতির ভিতরে .
তারা বিভিন্ন পরিবর্তনশীল।
আপনি একটি সাবান বুবল হিসাবে সুযোগের কথা ভাবতে পারেন …
এই প্রথম a = 50
একটি বুদ্বুদে থাকে, তারপর যখন আপনি একটি পদ্ধতি কল করেন, যে কোনো পদ্ধতি, আপনি একটি নতুন খালি বুদবুদ প্রবেশ করেন৷
আপনি নতুন বুদবুদের উপর কোনো স্থানীয় ভেরিয়েবল আনবেন না।
এবং যখন পদ্ধতিটি শেষ হয়ে যায়...
বুদবুদ পপ করে।
বুদবুদের ভিতরের ভেরিয়েবলগুলি অদৃশ্য হয়ে যায় এবং আপনি সেগুলি অ্যাক্সেস করতে পারবেন না৷
৷এইভাবে স্থানীয় ভেরিয়েবল কাজ করে।
ইন্সট্যান্স ভেরিয়েবল স্কোপ
ইনস্ট্যান্স ভেরিয়েবলের একটি বিস্তৃত সুযোগ রয়েছে।
বিশেষত, এগুলি রুবি অবজেক্টের ভিতরে ডেটা ভাগ করার জন্য ব্যবহৃত হয়।
এখানে একটি উদাহরণ আছে :
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
রুবি 🙂
-এ সুযোগের ধারণার সাথে এটিকে বিভ্রান্ত করবেন নাসারাংশ
আপনি রুবিতে স্কোপ এবং বাইন্ডিং অবজেক্ট সম্পর্কে শিখেছেন!
মনে রাখবেন যে স্কোপ নির্ধারণ করে আপনি কোন ভেরিয়েবলগুলি অ্যাক্সেস করতে পারেন৷ যে কোন সময়ে।
এটি একটি বুদবুদের মতো, স্থানীয় ভেরিয়েবলের নিজস্ব বুদবুদ থাকে, যখন বস্তুগুলি উদাহরণ ভেরিয়েবলের জন্য অন্য একটি বুদবুদ ভাগ করে।
পড়ার জন্য ধন্যবাদ।