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

রুবিতে Yield এবং Yield_Self মাস্টার করুন: একটি সার্বিক গাইড

রুবিতে “yield” শব্দটি কী বোঝায়? এবং এটি সঠিকভাবে কী করে?

খুব…

Yield একটি কিওয়ার্ড (অর্থাৎ এটি ভাষার একটি মূল অংশ) এবং এটি মেথডের ভিতরে একটি ব্লক কল করতে ব্যবহৃত হয়।

এখানে যা আপনাকে জানা দরকার:

  • একটি ব্লক কল করা মানে সেই ব্লকের ভিতরের কোড রান করা (একটি মেথড কল করার মতো)
  • Yield ব্লকে যেকোনো সংখ্যক আর্গুমেন্ট পাস করতে পারে
  • ব্লকের রিটার্ন ভ্যালু yield-এর রিটার্ন ভ্যালু হয়ে যায়

আপনাকে ব্লক বুঝতে হবে এটাকে সেন্স মেক করার জন্য।

আপনি ব্লককে নামহীন মেথড হিসেবে ভাবতে পারেন যা অন্যান্য মেথডে এক্সট্রা আর্গুমেন্ট হিসেবে পাস করা যায়।

এখানে একটি উদাহরণ:

 def make_salad yield "lettuce" yield "carrots" yield "olive oil" end make_salad { |ingredient| puts "Adding #{ingredient} to salad!" } 

এটি ব্লকটি ৩ বার কল করে, এই আউটপুট প্রডিউস করে:

 Adding lettuce to salad! Adding carrots to salad! Adding olive oil to salad! 

সারসংক্ষেপে yield কী করে, এটি একটি মেথড কল করার মতো, কিন্তু আপনি ব্লকটি কল করছেন।

ব্লকের জন্য আমাদের কোনো নাম নেই, তাই এই কিওয়ার্ডটি সেটি হ্যান্ডেল করে।

এখন:

চলুন এক্সপ্লোর করি কী ঘটে আপনার কাছে কল করার জন্য ব্লক না থাকলে।

ব্লক ছাড়া Yield == এরর মেসেজ

আপনি যদি ব্লক ছাড়া yield কল করেন, তবে আপনি একটি এরর পাবেন।

উদাহরণ:

 def write_code yield end write_code # LocalJumpError: no block given (yield) 

এই এরর ক্রিস্টাল-ক্লিয়ার, “no block given” মানে মেথড কল write_code একটি ব্লক প্রদান করছে না।

আপনি কীভাবে এই এরর প্রতিরোধ করতে পারেন?

এভাবে:

 def write_code yield if block_given? end 

block_given? মেথড চেক করে একটি ব্লক উপলব্ধ কিনা এবং এটি আপনাকে শুধু yield করার অনুমতি দেয় যদি সেটি সত্য হয়।

কেন Yield ব্যবহার করবেন?

yield ব্যবহার করা ব্লক সক্ষম করে।

আমরা ব্লক ব্যবহার করি একটি মেথড কলের অংশ হিসেবে কোডের বিটস পাস করার জন্য।

এটি সাহায্যকারী যখন:

  • আপনি একটি জেনেরিক লগিং ফাংশন লিখতে চান, যা লগ করে কোডের একটি বিট কতক্ষণ লাগে রান হতে
  • আপনি মেথড শেষ হলে কিছু কোড রান করতে চান (যেমন জাভাস্ক্রিপ্টে “callbacks”)
  • আপনি “লেজি কোড” চান, কোড যা শুধু দরকার হলে রান করে এবং যা ব্যবহারকারী কাস্টমাইজ করতে পারে (এটির একটি উদাহরণের জন্য Hash#fetch মেথড সম্পর্কে পড়ুন)

ভালো!

Yield_Self – পার্থক্য কী?

আপনি এই নতুন yield_self মেথড পেতে পারেন এবং ভাবতে পারেন এটি yield-এর সাথে সম্পর্কিত।

খুব, এটি নয়।

এমনকি yield(self) ভিন্ন, কারণ self বর্তমান অবজেক্টকে রেফার করে।

যেখানে yield_self, যা রুবি ২.৫-এ যোগ করা হয়েছে, সেই অবজেক্টকে রেফার করে যেটির ওপর আমরা মেথডটি কল করছি।

এই মেথডের একটি ভালো ব্যবহার?

যখনই আপনি মেথড চেইন করতে চান এবং আপনি যে অবজেক্টে yield_self কল করছেন সেটির সাথে কিছু করতে চান।

মূল অবজেক্টের পরিবর্তে রেজাল্ট রিটার্ন করে।

উদাহরণ:

 n_squared = ->(n) { n ** 2 } 2 .yield_self(&n_squared) .yield_self(&n_squared) # 16 

রুবি ২.৬-এ, yield_self-এর একটি অ্যালিয়াস আছে, then মেথড।

কিন্তু আপনার সাধারণ yield-এর সাথে কনফিউজ না হন।

ঠিক আছে?

রেলসে Yield

আমাকে রেলসে এবং টেমপ্লেটিং ইঞ্জিনে yield-এর ব্যবহার সম্পর্কে একটি কুইক মেনশন দিতে দিন।

আপনি yield লেআউটের ভিতরে পাবেন।

রেলস এটি আপনি যে ভিউ রেন্ডার করছেন তার কন্টেন্টস দিয়ে রিপ্লেস করে।

No yield ইকুয়ালস এমপটি লেআউট!

এভাবেই লেআউট এবং আপনার ভিউগুলো একসাথে কম্বাইন হয়।

সারাংশ

আপনি রুবিতে yield কিওয়ার্ড সম্পর্কে শিখেছেন! সঠিকভাবে সেটি কী, কীভাবে কাজ করে এবং কেন এটি গুরুত্বপূর্ণ।

এখন আপনার রুবি কোডে এটি ট্রাই করুন।

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


  1. রুবিতে ইনপুট ও আউটপুট (IO) মাস্টার করুন: একটি কম্প্রিহেনসিভ গাইড

  2. রুবিতে Dup বনাম Clone: অবজেক্ট কপি করার কৌশলকে মাস্টার করুন

  3. রুবিতে ফাংশনাল প্রোগ্রামিং আয়ত্ত করুন: একটি সম্পূর্ণ গাইড

  4. ফিটবিট পে মাস্টার করুন: সম্পূর্ণ ব্যবহারকারী গাইড