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

রুবি Case স্টেটমেন্ট মাস্টার করুন: বহুমুখী ব্যবহার এবং প্র্যাকটিক্যাল উদাহরণ

যখনই আপনাকে কিছু if / elsif স্টেটমেন্ট ব্যবহার করতে হয়, আপনি একটি রুবি case স্টেটমেন্ট ব্যবহার করার কথা ভাবতে পারেন। এই পোস্টে, আপনি কয়েকটি আলাদা ইউজ কেস এবং এটি কীভাবে আসলে কাজ করে সেটা শিখবেন।

রুবি Case স্টেটমেন্ট মাস্টার করুন: বহুমুখী ব্যবহার এবং প্র্যাকটিক্যাল উদাহরণ

নোট: অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজে এটি switch স্টেটমেন্ট হিসেবে পরিচিত।

রুবি case স্টেটমেন্টের কম্পোনেন্ট:

কীওয়ার্ড বিবরণ
case একটি case স্টেটমেন্ট ডেফিনিশন শুরু করে। আপনি যে ভেরিয়েবলটির সাথে কাজ করবেন সেটি নেয়।
when যে কন্ডিশনটি ম্যাচ হতে পারে সেটি একটি when স্টেটমেন্ট।
else যদি কিছু ম্যাচ না করে তবে এটি করুন। অপশনাল।

রুবি Case এবং রেঞ্জ

case স্টেটমেন্ট প্রথম দৃষ্টিতে যতটা ফ্লেক্সিবল লাগে, আসলে তার চেয়ে বেশি। চলুন একটি উদাহরণ দেখি যেখানে আমরা একটি ভ্যালু কোন রেঞ্জে পড়ে সেটার উপর ভিত্তি করে কিছু মেসেজ প্রিন্ট করতে চাই।

 case capacity when 0 "You ran out of gas." when 1..20 "The tank is almost empty. Quickly, find a gas station!" when 21..70 "You should be ok for now." when 71..100 "The tank is almost full." else "Error: capacity has an invalid value (#{capacity})" end 

আমার মতে এই কোড if / elsif ভার্শনের চেয়ে অনেক বেশি এলিগ্যান্ট।

রুবি Case এবং Regex

আপনি রেগুলার এক্সপ্রেশনও আপনার when কন্ডিশন হিসেবে ব্যবহার করতে পারেন। নিচের উদাহরণে আমাদের একটি serial_code আছে যার প্রথম লেটার বলে দেয় এই প্রোডাক্ট কনসাম করা কতটুকু রিস্কি।

 case serial_code when /\AC/ "Low risk" when /\AL/ "Medium risk" when /\AX/ "High risk" else "Unknown risk" end 

রুবি Case কখন ব্যবহার করবেন না

যখন আপনার একটি সিম্পল ১:১ ম্যাপিং থাকে, আপনি কিছু এইভাবে করার প্রলোভনে পড়তে পারেন।

 case country when "europe" "https://eu.example.com" when "america" "https://us.example.com" end 

আমার মতে এখানে এটা ভালো হবে:

 SITES = { "europe" => "https://eu.example.com", "america" => "https://us.example.com" } SITES[country] 

হ্যাশ সমাধানটি আরও ইফিশিয়েন্ট এবং সাথে কাজ করা সহজ। আপনি কি মনে করেন?

case কীভাবে কাজ করে: === মেথড

আপনি কীভাবে case আন্ডার দ্য হুড কাজ করে সেটা জানতে চাইতে পারেন। আমরা আমাদের প্রথম উদাহরণে ফিরে যাই, এটি হলো যা হচ্ছে:

 (1..20) === capacity (21..70) === capacity (71..100) === capacity 

আপনি দেখতে পাচ্ছেন, কন্ডিশনটি উল্টা হয়েছে কারণ রুবি বাম দিকের অবজেক্টের ওপর === কল করে। === শুধু একটি মেথড যা যেকোনো ক্লাস ইমপ্লিমেন্ট করতে পারে। এই কেসে, Range এই মেথডটি ইমপ্লিমেন্ট করে শুধু তখন true রিটার্ন করে যখন ভ্যালুটি রেঞ্জের ভেতরেই থাকে।

=== কীভাবে Rubinius-এ ইমপ্লিমেন্ট করা হয়েছে ( Range ক্লাসের জন্য):

 def ===(value) include?(value) end 

সোর্স: https://github.com/rubinius/rubinius/blob/master/core/range.rb#L178

Procs + Case

=== ইমপ্লিমেন্ট করার আরেকটি আকর্ষণীয় ক্লাস হলো Proc ক্লাস।

রিলেটেড পোস্ট: প্রক এবং ল্যাম্বডা নিয়ে আরও জানুন।

এই উদাহরণে আমি দুটি procs ডিফাইন করছি, একটি even নম্বর চেক করার জন্য, আরেকটি odd এর জন্য।

 odd = proc(&:odd?) even = proc(&:even?) case number when odd puts "Odd number" when even puts "Even number" end 

আসলে যা হচ্ছে সেটি হলো:

 odd.===(number) even.===(number) 

একটি প্রকের ওপর === ব্যবহার করার ইফেক্ট সেম call ব্যবহার করার মতো।

উপসংহার

আপনি শিখেছেন রুবি case স্টেটমেন্ট কীভাবে কাজ করে এবং কতটা ফ্লেক্সিবল হতে পারে। এখন আপনার পালা, আপনার নিজস্ব প্রজেক্টগুলতে এটিকে সেরা ব্যবহারে নিয়ে আসুন।

আশা করি আর্টিকেলটি আপনার উপকারী লাগলো!

দয়া করে এই পোস্ট শেয়ার করুন যাতে আরও মানুষ শিখতে পারে! 🙂


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

  2. রুবি মাস্টারিং: মেথড এলিয়াস তৈরি করার জন্য Alias কিওয়ার্ড ব্যবহার

  3. রুবি অবজেক্ট ডেকোরেটর প্যাটার্ন দিয়ে সমৃদ্ধ করুন: একটি প্র্যাক্টিক্যাল গাইড

  4. আইফোন হোম বাটনের সকল ফাংশন অন্বেষণ করুন