কেস স্টেটমেন্টের চেয়ে সহজ এবং বিরক্তিকর আর কিছুই হতে পারে না। এটি সি থেকে একটি হোল্ডওভার। আপনি এটিকে একগুচ্ছ ifs প্রতিস্থাপন করতে ব্যবহার করেন। মামলা বন্ধ. নাকি এটা?
আসলে, রুবিতে কেস স্টেটমেন্টগুলি আপনার কল্পনার চেয়ে অনেক বেশি সমৃদ্ধ এবং জটিল। আসুন শুধু একটি উদাহরণ দেখি:
case "Hi there"
when String
puts "case statements match class"
end
# outputs: "case statements match class"
এই উদাহরণটি দেখায় যে কেস স্টেটমেন্ট শুধুমাত্র একটি আইটেমের মান এর সাথে মেলে না কিন্তু এর শ্রেণীও . এটি সম্ভব কারণ হুডের নিচে, রুবি ===
ব্যবহার করে অপারেটর, ওরফে। তিনটি সমান অপারেটর।
===
এর একটি দ্রুত সফর অপারেটর
যখন আপনি x === y
লিখবেন রুবিতে y, আপনি জিজ্ঞাসা করছেন "y কি x দ্বারা প্রতিনিধিত্ব করা গ্রুপের অন্তর্গত?" এটি একটি খুব সাধারণ বিবৃতি। আপনি যে ধরনের গ্রুপের সাথে কাজ করছেন তার উপর নির্ভর করে স্পেসিফিকেশন পরিবর্তিত হয়।
# Here, the Class.===(item) method is called, which returns true if item is an instance of the class
String === "hello" # true
String === 1 # false
স্ট্রিং, রেগুলার এক্সপ্রেশন এবং রেঞ্জ সবই তাদের নিজস্ব ===(item)
সংজ্ঞায়িত করে পদ্ধতি, যা আপনার প্রত্যাশার মতো কম বা বেশি আচরণ করে। এমনকি আপনি আপনার নিজের ক্লাসে একটি ট্রিপল সমান পদ্ধতি যোগ করতে পারেন।
এখন যেহেতু আমরা এটি জানি, আমরা কেস নিয়ে সব ধরণের কৌশল করতে পারি।
কেস স্টেটমেন্টে ব্যাপ্তি মেলে
আপনি কেস স্টেটমেন্টে রেঞ্জ ব্যবহার করতে পারেন ধন্যবাদ যে range === n
সহজভাবে range.include?(n)
এর মান প্রদান করে . আমি কিভাবে এত নিশ্চিত হতে পারি? এটা ডক্সে আছে।
case 5
when (1..10)
puts "case statements match inclusion in a range"
end
# outputs "case statements match inclusion in a range"
কেস স্টেটমেন্টের সাথে রেগুলার এক্সপ্রেশন মেলানো
কেস স্টেটমেন্টে রেজেক্স ব্যবহার করাও সম্ভব, কারণ /regexp/ === "string"
স্ট্রিং রেগুলার এক্সপ্রেশনের সাথে মেলে তবেই true রিটার্ন করে। Regexp
এর জন্য ডক্স এটি ব্যাখ্যা করুন৷
case "FOOBAR"
when /BAR$/
puts "they can match regular expressions!"
end
# outputs "they can match regular expressions!"
ম্যাচিং প্রক্স এবং ল্যাম্বডাস
এটি একটি অদ্ভুত এক ধরনের. আপনি যখন ব্যবহার করেন Proc#===(item)
, এটা Proc#call(item)
করার মতই . এখানে এর জন্য ডক্স রয়েছে। এর মানে হল যে আপনি আপনার কেস স্টেটমেন্টে ডায়নামিক ম্যাচার হিসেবে ল্যাম্বডাস এবং প্রোকস ব্যবহার করতে পারেন।
case 40
when -> (n) { n.to_s == "40" }
puts "lambdas!"
end
# outputs "lambdas"
আপনার নিজের ম্যাচার ক্লাস লেখা
আমি উপরে উল্লেখ করেছি, আপনার ক্লাসে কাস্টম কেস আচরণ যোগ করা আপনার নিজের ===
সংজ্ঞায়িত করার মতোই সহজ। পদ্ধতি এর জন্য একটি ব্যবহার হতে পারে জটিল শর্তসাপেক্ষ যুক্তিকে একাধিক ছোট শ্রেণীতে টেনে আনা। আমি নীচের উদাহরণে এটি কীভাবে কাজ করতে পারে তা স্কেচ করেছি:
class Success
def self.===(item)
item.status >= 200 && item.status < 300
end
end
class Empty
def self.===(item)
item.response_size == 0
end
end
case http_response
when Empty
puts "response was empty"
when Success
puts "response was a success"
end