কম্পিউটার টিউটোরিয়াল

রুবি জেমসের অভ্যন্তরীণ কার্যক্রম উদ্ঘাটন: একটি ডেভেলপার গাইড

রেইলস অ্যাপ বিল্ড করার সময়, আপনি অনেক জেম ব্যবহার করবেন। 그중 কিছু সম্পূর্ণরূপে ম্যাজিকাল মনে হয়! কিন্তু সেই ম্যাজিক আসলে কীভাবে হয়?

বেশিরভাগ জেমে, এমন কিছুই নেই যা আপনি করতেন না। এটি শুধু রুবি কোড। কখনও কখনও এটি জটিল রুবি কোড। কিন্তু যদি আপনি সেই কোড এক্সপ্লোর করেন, তবে আপনি বুঝতে পারবেন যে সেই ম্যাজিক আসলে কোথা থেকে আসে।

সোর্স কোড খুঁজে বের করা

একটি জেম কীভাবে কাজ করে সেটি বুঝতে, আপনাকে এর কোড খুঁজে বের করতে হবে।

যদি এমন একটি মেথড থাকে जिसके সম্পর্কে আপনি বেশি জানতে চান, তবে সোর্স খুঁজে বের করার একটি সহজ উপায় আছে: method এবং source_location। আমি এই সম্পর্কে আগে একটু লিখেছিলাম। এখানে একটি উদাহরণ:

irb(main):001:0> ActiveRecord::Base.method(:find).source_location
=> ["/usr/local/lib/ruby/gems/2.1.0/gems/activerecord-4.2.0.beta4/lib/active_record/core.rb", 127]

কিন্তু যদি আপনি একাধিক মেথড সম্পর্কে জানতে চান?

যদি আপনার রেইলস অ্যাপের ডিরেক্টরির ভিতরে একটি কনসোল খোলা থাকে, তবে আপনি সরাসরি একটি জেমের কোডে যেতে পারেন:

~/Source/gem_example[master] jweiss$ bundle open rack

যদি এটি আপনার Gemfile-এ থাকে, তবে bundle open rack পুরো rack জেমকে আপনার এডিটরে খুলে দেবে। আপনি आरাম से এর ভিতরের সকল ফাইল ব্রাউজ করতে পারেন।

কোথা থেকে শুরু করবেন?

এখন আপনি জেমের কোড কোথায় সেটি জানেন, তবে কীভাবে বুঝতে শুরু করবেন?

যদি আপনি lib/active_record.rb পড়ে activerecord কীভাবে কাজ করে সেটি বুঝতে চান, তবে আপনি কোথাও পৌঁছাবেন না। আপনি শুধু খুব সারা autoload এবং require পাবেন।

একটি জেম বুঝতে সবচেয়ে সহজ হয় পরে আপনার অ্যাপ সেটি একটু ব্যবহার করলে। একবার আপনি জানলে যে জেমটি আপনার জন্য কী ধরনের কাজ করছে। সেইভাবে, আপনার ইতিমধ্যে একটি আইডিয়া থাকবে কোনো আকর্ষণীয় ক্লাস এবং মেথডগুলো থেকে শুরু করা উচিত।

কিছু আকর্ষণীয় মেথডের নাম পাওয়ার পর, আপনি source_location, আপনার এডিটরে Find in Project, বা কমান্ড লাইনে ag ব্যবহার করে দেখতে পারেন সেগুলো কোথায় ডিফাইন করা হয়েছে। এবং সেটি হলে ফান শুরু হয়।

জেমের কোড আপনার মেশিনে আছে, ঠিক না? এذَا মানে আপনি চাইলে সেটি যেভাবে খুশি করতে পারেন! আপনি সেটি ভাঙা দিতে পারেন, আর কেউ জানবেন না।

যখন আমি একটি জেম কীভাবে কাজ করে সেটি বুঝতে চাই, আমি শুধু কোড পড়ি না। আমি জেমের ভিতরে puts স্টেটমেন্ট যোগ করি, এক্সেপশন থ্রো করি যাতে বুঝতে পারি কীভাবে আমার অ্যাপ নির্দিষ্ট লাইনগুলোর কাছে পৌঁছেছে, এবং কোডের সাথে এক্সপেরিমেন্ট করি যাতে বুঝতে পারি লেখক সেটি কেন এইভাবে লিখেছেন।

একবার আপনি ট্রিকটি কীভাবে করা হয় সেটি জানলে, এটা আর তত ম্যাজিকাল লাগবে না। এবং আপনাকে আন্দাজে বলতে হবে না যে সেটি অস্বাভাবিক পরিস্থিতিতে কীভাবে বिहেভ করবে, কারণ আপনি নিজে সেটি দেখতে পাবেন।

খुदকে পরিষ্কার রাখা

জেম কোডের সাথে এক্সপেরিমেন্ট করার পর, আপনার অ্যাপ খুব খারাপ অবস্থায় থাকতে পারে। এটা হয়তো আর রানও করবে না! এবং যদি করলেও, আপনার যোগ করা সকল puts স্টেটমেন্ট কনসোলে স্প্যাম করবে।

কিন্তু RubyGems-এ জিনিসগুলো норমাল ফিরিয়ে আনার একটি কুইক উপায় আছে:

~ jweiss$ gem pristine activerecord -v 4.2.0
Restoring gems to pristine condition...
Restored activerecord-4.2.0

অথবা, আপনি যদি মনে ন পারেন কোন জেমগুলোতে আপনি হাত দিয়েছেন, এবং আপনি খুব ধৈর্যের'Homme:

~ jweiss$ gem pristine --all

এই পরে, আপনার সকল জেম ইনস্টল করার সময় যেভাবে ছিল সেভাবেই ফিরে যাবে।

আপনি কী এক্সপ্লোর করবেন?

যখন আপনি আপনার জেমগুলোর ভিতরের কোড খুঁজে বের করবেন, পড়বেন, এবং এক্সপ্লোর করবেন, তবে আপনি আপনার ডিপেন্ডেন্সি কোডকে আরও গভীর 레ভেলে বুঝতে পারবেন। এবং আপনাকে আর অনুমান ও অনুমানের ওপর নির্ভর করতে হবে না।

এই পোস্টটি মূলত আমার লিস্টে এক্সক্লूसিভলি পাঠানো হয়েছিল। প্রতিটি শুক্রবারে ইনবক্সে এরকম আরও পোস্ট পাওয়ার জন্য, এখানে সাইন আপ করুন!

  1. রুবি কোড উন্নত করুন: ক্লিনার OOP ডিজাইনের জন্য Cohesion & Coupling আয়ত্ত করুন

  2. Ruby-এ TracePoint দিয়ে মেথড ট্রেস করা: একটি ব্যবহারিক গাইড

  3. রুবি ডিবাগিং মাস্টার করুন: কমন এররর দ্রুত সমাধান

  4. আইপ্যাড ও আইফোনে QR কোড স্ক্যান করার পদ্ধতি: একটি কুইক গাইড