আপনি যদি কিছু সময়ের জন্য রুবি ব্যবহার করে থাকেন তবে কিছু জিনিস হুডের নিচে কীভাবে কাজ করে সে সম্পর্কে আপনি কৌতূহলী হতে পারেন।
রুবি ইন্টারনালের গভীরে খনন করার একটি উপায় হল সোর্স কোড পড়া যা এটিকে কাজ করে। এমনকি যদি আপনি C জানেন না, তবুও আপনি কিছু আকর্ষণীয় জিনিস নিতে পারেন।
সোর্স কোডটি রুবির জন্য গিথুব রেপোতে পাওয়া যাবে।
আদর্শভাবে, আপনি কোডকোয়েরির মতো একটি টুল ব্যবহার করতে চান যা আপনাকে সহজেই ক্লাস এবং পদ্ধতির নাম খুঁজে পেতে দেয়।
কোর ক্লাস অন্বেষণ
আপনার বেশিরভাগ অনুসন্ধান রুট ফোল্ডারে ঘটবে। সেখানেই আপনি Object-এর মতো সমস্ত মূল ক্লাসের সোর্স কোড পাবেন। object.c-এ অথবা Array array.c-এ .
চলুন hash.c দেখে নেওয়া যাক .
আপনি যদি 4468 লাইনে স্ক্রোল করেন তবে আপনি কিছু নাম দেখতে পাবেন যা পরিচিত হওয়া উচিত।
এটি দিয়ে শুরু করা যাক :
rb_cHash =rb_define_class("হ্যাশ", rb_cObject);
এই লাইনে, Hash ক্লাস rb_define_class দ্বারা সংজ্ঞায়িত করা হচ্ছে ফাংশন দ্বিতীয় আর্গুমেন্ট (rb_cObject ) হল এই শ্রেণীর জন্য সুপারক্লাস।
আপনি যদি জানতে চান কিভাবে একটি ক্লাস সংজ্ঞায়িত করার প্রক্রিয়া কাজ করে তাহলে আপনি rb_define_class সার্চ করেন .

rb_define_class থেকে প্রথম অংশ ক্লাসটি ইতিমধ্যে সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করে।
যদি (rb_const_defined(rb_cObject, id)) { // ...}
এর ভিতরে if ব্লক, রুবি কিছু বিজ্ঞতা পরীক্ষা করে, যেমন নিশ্চিত করা যে আমরা এমন একটি ক্লাসের সাথে কাজ করছি যা ইতিমধ্যেই সংজ্ঞায়িত করা আছে।
যদি ক্লাসটি সংজ্ঞায়িত না হয় তবে এটি এভাবে সংজ্ঞায়িত করা হয়:
ক্লাস =rb_define_class_id(id, super);st_add_direct(rb_class_tbl, id, klass);rb_name_class(klass, id);rb_const_set(rb_cObject, id, klass);rb_class_inherited(super;>আপনি এই সমস্ত পদ্ধতির সংজ্ঞা পড়তে পারেন, কিন্তু আমি মনে করি সেগুলি বেশ স্ব-ব্যাখ্যামূলক৷
st_add_direct-এ , 'st' অংশের অর্থ হল 'প্রতীক টেবিল', এবং এটি শুধুমাত্র একটি হ্যাশ টেবিল।rb_const_setফাংশনObject-এ একটি ধ্রুবক সেট করে ক্লাস, এটি ক্লাসটিকে সর্বত্র উপলব্ধ করবে৷এবং
rb_class_inheritedinheritedকল করে সুপারক্লাসের পদ্ধতি, আপনি এখানে এই পদ্ধতির ডকুমেন্টেশন খুঁজে পেতে পারেন।কোডের পরবর্তী বিভাগটি পদ্ধতি সংজ্ঞা নিয়ে গঠিত। MRI
rb_define_methodব্যবহার করে সেটা করতে।এখানে একটি উদাহরণ :
rb_define_method(rb_cHash,"index", rb_hash_index, 1);rb_define_method(rb_cHash,"size", rb_hash_size, 0);rb_define_method(rb_cHash,"দৈর্ঘ্য", rb_f_define_cHash,"দৈর্ঘ্য", rb_f_def_0rmp?" , rb_hash_empty_p, 0);আর্গুমেন্ট এই রকম হয় :
- প্রথম আর্গুমেন্ট হল সেই ক্লাস যার উপর এই পদ্ধতিটি সংজ্ঞায়িত করা হচ্ছে
- দ্বিতীয় আর্গুমেন্ট হল পদ্ধতির নাম, তৃতীয় আর্গুমেন্ট হল C ফাংশন যা আসলে এই পদ্ধতিটি প্রয়োগ করে
- শেষ আর্গুমেন্ট হল এই রুবি পদ্ধতির প্রয়োজনীয় আর্গুমেন্টের সংখ্যা (একটি নেতিবাচক মান মানে ঐচ্ছিক আর্গুমেন্ট)
rb_define_singleton_method ফাংশন একটি ক্লাস পদ্ধতি সংজ্ঞায়িত করতে ব্যবহৃত হয়।
rb_define_singleton_method(rb_cHash, "[]", rb_hash_s_create, -1);
rb_define_singleton_method এর মূল অংশ কোডের একটি মাত্র লাইন:
rb_define_method(singleton_class_of(obj), name, func, argc);
আপনি যদি অন্বেষণ চালিয়ে যেতে চান, তাহলে একটি ভাল ফাইল দেখুন object.c .
স্ট্যান্ডার্ড লাইব্রেরি অন্বেষণ
ঠিক আছে, আজকের জন্য যথেষ্ট সি!
কিছু রুবি কোড পড়লে কেমন হয়?
রুবি স্ট্যান্ডার্ড লাইব্রেরি রুবিতে লেখা এবং আপনি এটি /lib-এর অধীনে খুঁজে পেতে পারেন ডিরেক্টরি।
স্ট্যান্ডার্ড লাইব্রেরিতে OpenStruct, Base64 এর মত জিনিস থাকে এনকোডিং এবং Set ডেটা স্ট্রাকচার।
একটি সেট একটি অ্যারের অনুরূপ, কিন্তু বিশেষ বৈশিষ্ট্য সহ যে সমস্ত উপাদান অনন্য। অন্য কথায়, একটি সেটে কোনো ডুপ্লিকেট থাকে না।
ওটা কিভাবে কাজ করে? এর পিছনে কোন অভিনব অ্যালগরিদম আছে?
আমরা যদি set.rb দেখে নিই আপনি দ্রুত আবিষ্কার করবেন যে এটি একটি Hash দ্বারা সমর্থিত বস্তু।
# সেটে প্রদত্ত অবজেক্ট যোগ করে এবং স্ব ফেরত দেয়। একবারে অনেক উপাদান যোগ করতে +মার্জ + ব্যবহার করুন।তাই যদি আপনি একটি সদৃশ উপাদান যোগ করেন, এটি ইতিমধ্যেই বিদ্যমান কিনা তা পরীক্ষা করার প্রয়োজন নেই, এটি কেবল পুরানোটিকে ওভাররাইট করবে৷
রুবিনিয়াস অন্বেষণ
রুবির সোর্স কোড অন্বেষণ করার আরেকটি উপায় হল রুবিনিয়াসের মত বিকল্প বাস্তবায়নের দিকে নজর দেওয়া।
রুবিনিয়াস কোড এমআরআই থেকে ভিন্নভাবে সংগঠিত, তাই এর জন্য আমি গিথুব এবং 'ফাইন্ড ফাইল' ফিচার ব্যবহার করতে চাই।
আপনি যদি
Enumerableসম্পর্কে আরও জানতে চান তারপর আপনি শুধু 'গণনাযোগ্য' টাইপ করুন এবং আপনি সমস্ত সম্পর্কিত ফাইল দেখতে পাবেন।উপসংহার
আপনি যেমন দেখেছেন, আপনি শিখতে পারেন কিভাবে রুবি অনেক প্রচেষ্টা ছাড়াই হুডের নিচে কাজ করে। এগিয়ে যান এবং নিজে থেকে অন্বেষণ করুন এবং আপনি যা আবিষ্কার করেছেন তা সবাইকে জানান!
আপনি যদি এই পোস্টটি পছন্দ করেন তবে আমার নিউজলেটারে যোগ দিতে ভুলবেন না, শুধু নীচের ফর্মটিতে আপনার ইমেলটি ড্রপ করুন এবং আপনি বিনামূল্যে আপডেট এবং একচেটিয়া সামগ্রী পাবেন৷
