যখনই আপনাকে কিছু if / elsif স্টেটমেন্ট ব্যবহার করতে হয়, আপনি একটি রুবি 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 স্টেটমেন্ট কীভাবে কাজ করে এবং কতটা ফ্লেক্সিবল হতে পারে। এখন আপনার পালা, আপনার নিজস্ব প্রজেক্টগুলতে এটিকে সেরা ব্যবহারে নিয়ে আসুন।
আশা করি আর্টিকেলটি আপনার উপকারী লাগলো!
দয়া করে এই পোস্ট শেয়ার করুন যাতে আরও মানুষ শিখতে পারে! 🙂