কম্পিউটার

রুবিতে Zeitwerk এবং মডিউল অটোলোডিং (স্পষ্টভাবে ব্যাখ্যা করা হয়েছে)

এই নিবন্ধটি রুবিতে ক্লাস এবং মডিউল অটোলোডিং ব্যাখ্যা করে। নতুন "Zeitwerk" রত্ন সহ যা Rails 6 এর অংশ।

একটি প্রশ্ন দিয়ে শুরু করা যাক...

কিভাবে আমরা একাধিক সোর্স কোড ফাইল একত্রে আনতে পারি?

আমাদের require তাদের।

একটি ফাইল প্রয়োজন রুবি এটি পড়তে এবং ভিতরে কোড চালায়. কিন্তু যদি আমাদের কাছে প্রয়োজনীয় ফাইলগুলির একটি তালিকা থাকে তাহলে আমাদের সম্ভবত সবগুলি লোড করার দরকার নেই .

অন্তত এখনই না…

কিভাবে আমরা ফাইলগুলি কেবলমাত্র আমাদের প্রয়োজন হলেই লোড করতে পারি তাই আমরা আমাদের আবেদন দ্রুত শুরু করতে পারি?

সেখানেই অটোলোডিং আসে!

কিভাবে অটোলোডিং ব্যবহার করবেন

রুবির একটি অন্তর্নির্মিত অটোলোডিং বৈশিষ্ট্য রয়েছে৷

এটি ধ্রুবকের উপর ভিত্তি করে।

যখন একটি ধ্রুবক যেমন Coconut প্রথমবার পাওয়া গেছে, রুবি তার সংশ্লিষ্ট ফাইল লোড করার চেষ্টা করবে।

কিন্তু প্রথমে :

আপনাকে এই ধ্রুবকটিকে এর ফাইলের নামের সাথে নিবন্ধন করতে হবে।

এরকম :

autoload :Coconut, "lib/coconut.rb"

এখন রুবি জানে যখনই আপনি Coconut ব্যবহার করতে চান তখন কোথায় দেখতে হবে ক্লাস বা মডিউল।

কিন্তু আপনি কি জানেন আরও ভাল হবে?

কল্পনা করুন যদি আপনাকে ম্যানুয়ালি ধ্রুবক নিবন্ধন করতে না হয় এবং রুবি জানতেন যে কোথায় সবকিছু খুঁজে পেতে হবে।

আচ্ছা…

Rails এটিই করে, কিন্তু আগে রেল 6 এটি এই autoload ব্যবহার করেনি মেকানিজম।

রেলের আগে অটোলোডিং 6

আমি সম্পূর্ণরূপে বুঝতে পারছি না এটি কিভাবে কাজ করে, কিন্তু রেলগুলি const_missing ব্যবহার করে , autoload এর পরিবর্তে স্বয়ংক্রিয়ভাবে খুঁজে পেতে এবং আপনার প্রকল্পে ফাইল লোড করতে.

কেন এটি দরকারী?

কারণ এর মানে হল আপনাকে require ব্যবহার করতে হবে না আপনার রেল প্রকল্পগুলিতে৷

কনভেনশন ওভার কনফিগারেশন…

আপনি নিয়ম মেনে চললে এটা সবই স্বয়ংক্রিয়ভাবে ঘটে।

নিয়মগুলি হল৷ :

  1. আপনার ফাইলটি যেখানে পাওয়া যাবে সেখানে রাখুন (যেমন ActiveSupport::Dependencies.autoload_paths দ্বারা সংজ্ঞায়িত করা হয়েছে )
  2. ফাইল প্রতি একটি ক্লাস / মডিউল সংজ্ঞায়িত করুন
  3. আন্ডারস্কোর ব্যবহার করে ক্লাসের নামের পরে ফাইলটির নাম দিন (UsersController => users_controller )

তারপর…

যখনই আপনার কোড এই শ্রেণীর নামগুলির মধ্যে যেকোনও উল্লেখ করে, রেলগুলি জানবে যে সেগুলি কোথায় পাওয়া যাবে৷

খুবই সহায়ক।

রেলের পরে অটোলোডিং 6

রেল 6 একটি নতুন ধ্রুবক স্বয়ংক্রিয় লোডিং প্রক্রিয়া প্রবর্তন করে৷

একে Zeitwerk বলা হয়।

এটি কীভাবে "ক্লাসিক" রেল অটোলোডিং থেকে আলাদা?

const_missing থেকে ভিন্ন পুরানো রেল সংস্করণগুলির দ্বারা ব্যবহৃত পদ্ধতি, যার মধ্যে তথ্যের অভাব রয়েছে - যেমন মডিউল নেস্টিং - ফলে অনেকগুলি সীমাবদ্ধতা রয়েছে৷

Zeitwerk রুবির autoload ব্যবহার করে .

এই নতুন বাস্তবায়ন অনুরূপ ফাইল-নামকরণের নিয়ম অনুসরণ করে।

আসলে :

Zeitwerk ক্লাসের নাম অনুমান করতে ফাইলের নাম ব্যবহার করে, users_controller => UsersController .

যা আগের থেকে ঠিক উল্টো।

Btw, আপনি এখনও autoload_paths ব্যবহার করতে পারেন , কিন্তু আপনি শুধুমাত্র BASE পাথ যোগ করতে চান, যেমন "/lib" , "/lib/**" এর পরিবর্তে .

কেন?

নেমস্পেস এবং নেস্টিংয়ের সাথে এটি কাজ করে।

  • যদি আপনার "lib" থাকে অটোলোডে, এবং আপনি "Fruit::Orange" সংজ্ঞায়িত করতে চান , তারপর ফাইলের নাম হতে হবে "lib/fruit/orange.rb" .
  • কিন্তু আপনার যদি "lib/fruit" থাকে অটোলোডে, তারপরে আপনাকে অন্য ফোল্ডার ব্যবহার করতে হবে, যাতে আপনার ফাইলের নাম হয়ে যায় "lib/fruit/fruit/orange.rb" একই শ্রেণীর জন্য।

সেরা অংশ?

এই নতুন কার্যকারিতা রেলের সাথে আঠালো নয়, তাই আপনি এটিকে আপনার নন-রেল প্রকল্পগুলিতে ব্যবহার করতে পারেন!

সারাংশ

আপনি রুবিতে মডিউল অটোলোডিং সম্পর্কে শিখেছেন, এটি ঠিক কী এবং এটি কীভাবে কাজ করে!

এই নতুন বোঝাপড়ার মাধ্যমে, আপনি আপনার রুবি প্রকল্পগুলিকে সবচেয়ে কার্যকর উপায়ে গঠন করতে সক্ষম হবেন৷

এবার আপনার পালা, আপনার সম্পাদক খুলুন এবং কিছু মজা করুন।

পড়ার জন্য ধন্যবাদ! 🙂


  1. রেলে রুবি কি এবং কেন এটি দরকারী?

  2. রেলে রুবি এবং রুবিতে পদ্ধতিগুলি কীভাবে অর্পণ করবেন

  3. রুবি বিকাশকারীদের জন্য র্যাক ব্যাখ্যা করা হয়েছে

  4. আমি রেল পডকাস্টে রুবিতে ছিলাম!