কম্পিউটার

রুবিতে ফলন এবং ফলন_সেলফ বোঝা (সম্পূর্ণ নির্দেশিকা)

রুবিতে "ফলন" শব্দের অর্থ কী? এবং এটা ঠিক কি করে?

ভাল…

ফলন হল একটি কীওয়ার্ড (অর্থাৎ এটি ভাষার একটি মূল অংশ) এবং এটি একটি ব্লক কল করার পদ্ধতির ভিতরে ব্যবহার করা হয়।

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

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

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

আপনি ব্লকগুলিকে নাম ছাড়াই পদ্ধতি হিসাবে ভাবতে পারেন যা অন্যান্য পদ্ধতিতে অতিরিক্ত আর্গুমেন্ট হিসাবে পাস করা যেতে পারে৷

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

def make_salad
  yield "lettuce"
  yield "carrots"
  yield "olive oil"
end

make_salad { |ingredient| puts "Adding #{ingredient} to salad!" }

এটি ব্লকটিকে 3 বার কল করে, এই আউটপুট তৈরি করে :

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

এটাই মূলত yield করে, একটি পদ্ধতি কল করার মত, কিন্তু পরিবর্তে আপনি ব্লক কল করছেন.

ব্লকটির জন্য আমাদের কাছে কোনো নাম নেই, তাই এই কীওয়ার্ডটি এটির যত্ন নেয়৷

এখন :

আপনার কাছে কল করার জন্য ব্লক না থাকলে কী হয় তা অন্বেষণ করা যাক৷

ব্লক ছাড়াই ফলন ==ত্রুটি বার্তা

যদি আপনি yield কল করেন একটি ব্লক না করে, তাহলে আপনি একটি ত্রুটি পাবেন৷

উদাহরণ :

def write_code
  yield
end

write_code

# LocalJumpError: no block given (yield)

এই ত্রুটিটি ক্রিস্টাল-ক্লিয়ার, "কোন ব্লক দেওয়া হয়নি" এর অর্থ হল পদ্ধতি কল write_code একটি ব্লক প্রদান করছে না৷

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

এই মত:

def write_code
  yield if block_given?
end

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

ইল্ড ব্যবহার কেন?

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

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

এটি সহায়ক যখন :

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

চমৎকার!

ইল্ড_সেলফ - পার্থক্য কি?

আপনি এই নতুন yield_self খুঁজে পেতে পারেন পদ্ধতি এবং মনে করুন এটি yield এর সাথে সম্পর্কিত .

আচ্ছা, তা নয়৷

এমনকি yield(self) ভিন্ন, কারণ স্ব বলতে বর্তমান বস্তুকে বোঝায়।

যেখানে yield_self , যা রুবি 2.5-এ যোগ করা হয়েছিল, সেই বস্তুটিকে বোঝায় যেটি আমরা পদ্ধতিতে কল করছি।

এই পদ্ধতির জন্য একটি ভাল ব্যবহার?

যখনই আপনি পদ্ধতি চেইন করতে চান এবং আপনি যে বস্তুটিকে yield_self কল করছেন তার সাথে কিছু করতে চাইলে এটি ব্যবহার করুন চালু।

ফলাফল ফেরত দেওয়ার সময়, আসল বস্তুর পরিবর্তে।

উদাহরণ :

n_squared = ->(n) { n ** 2 }

2
.yield_self(&n_squared)
.yield_self(&n_squared)

# 16

রুবি 2.6-এ, yield_self-এর একটি উপনাম আছে , then পদ্ধতি।

তবে এটিকে আপনার নিয়মিত yield এর সাথে বিভ্রান্ত করবেন না .

ঠিক আছে?

রেলে ফলন

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

আপনি yield খুঁজে পাবেন লেআউটের ভিতরে।

আপনি যে দৃশ্যটি রেন্ডার করছেন তার বিষয়বস্তুর সাথে রেলগুলি এটিকে প্রতিস্থাপন করে৷

কোন yield নেই খালি লেআউটের সমান!

এভাবেই লেআউট এবং আপনার মতামত একত্রিত হয়।

সারাংশ

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

এখন আপনার রুবি কোডে একবার চেষ্টা করে দেখুন৷

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


  1. ইনপুট ও আউটপুট (IO) রুবিতে:দ্য ডেফিনিটিভ গাইড

  2. রুবিতে ডুপ বনাম ক্লোন:পার্থক্য বোঝা

  3. রুবিতে কার্যকরী প্রোগ্রামিং (সম্পূর্ণ নির্দেশিকা)

  4. একটি সম্পূর্ণ নির্দেশিকা:Fitbit Pay