Ruby-তে ফ্লো কন্ট্রোল এক্সপ্রেশন নামে এক ধরনের এক্সপ্রেশন আছে। এগুলো দিয়ে প্রোগ্রাম কীভাবে চলবে তা নিয়ন্ত্রণ করা হয় এবং এগুলো একটি ট্রুথি বা ফলসি মান নেয়। ট্রুথি বা ফলসি মান তৈরি করতে যে অপারেটরগুলো ব্যবহার করা যায়, এদেরকে তুলনা অপারেটর বলা হয়।
কোন কোডটি চলবে আর কোনটি চলবে না, তা নিয়ন্ত্রণ করতে মূলত দুটি কন্ট্রোল এক্সপ্রেশন ব্যবহার করা হয়। অন্য কথায়, কোন নির্দিষ্ট শাখাটি চলবে সেটিও এরা ঠিক করে।
এই দুটি হলো: if এবং unless এক্সপ্রেশন।
তুলনা অপারেটর দিয়ে মান তুলনা করা হয় এবং এটি একটি true বা false মান রিটার্ন করে।
নিচের অপারেটরগুলো দিয়ে তুলনা করতে হলে দুটি মানের টাইপ একই হতে হবে।
মান দুটির টাইপ একই না হলে কম্পাইলার একটি এরর থ্রো করবে।
এখানে অপারেটরগুলোর একটি তালিকা এবং কখন তারা true মান দেয় তার একটি উদাহরণ আছে:
| মেথড | বিবরণ | উদাহরণ |
|---|---|---|
| < | কম | 4 < 5 |
| <= | কম বা সমান | 4 <= 4 |
| > | বেশি | 3 > 1 |
| >= | বেশি বা সমান | 2 >= 2 |
আগে উল্লেখ করা অপারেটরগুলোর বিপরীতে, সমান এবং অসমান অপারেটর দিয়ে যেকোনো টাইপের মান তুলনা করা যায়।
== অপারেটর দিয়ে দুটি মান সমান কি না তা যাচাই করা হয়, আর এর মধ্যে মানের টাইপ যাচাইও অন্তর্ভুক্ত।
!=-ও একইভাবে কাজ করে, তবে মান দুটি অসমান হলে এটি true রিটার্ন করে আর সমান হলে false রিটার্ন করে।
এখানে সমান এবং অসমান অপারেটরগুলোর একটি তালিকা এবং কখন তারা true মান দেয় তার একটি উদাহরণ আছে:
| মেথড | বিবরণ | উদাহরণ |
|---|---|---|
| == | সমান | 4 == 4 |
| != | অসমান | 5 != 4 |
সম্মিলিত তুলনা অপারেটরকে (মাঝে মাঝে স্পেসশিপ অপারেটর বলা হয়) একটি বিশেষ তুলনা অপারেটর।
এটি এই অর্থে বিশেষ যে এটি ট্রুথি বা ফলসি মান রিটার্ন করে না, বরং একটি সংখ্যা রিটার্ন করে।
এটি <=> হিসেবে লেখা হয় এবং দুটি মান তুলনা করতে ব্যবহৃত হয়।
বাম দিকের মান ডান দিকের মানের চেয়ে বেশি হলে এটি 1 রিটার্ন করে, বাম দিকের মান ডান দিকের চেয়ে কম হলে -1, আর মান দুটি সমান হলে 0 রিটার্ন করে।
1 <=> 2 # => -1
2 <=> 2 # => 0
3 <=> 2 # => 1
if স্টেটমেন্টif স্টেটমেন্ট দিয়ে যাচাই করা হয় প্রদত্ত শর্তটি ট্রুথি কি না বা ফলসি কি না।
শর্তটি ট্রুথি হলে if স্টেটমেন্টের ভেতরের কোডটি চলবে।
একটি if স্টেটমেন্ট end কিওয়ার্ড দিয়ে শেষ হয়।
value = 1
if value == 1
"1 is equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
end
# => nil
unless স্টেটমেন্টunless স্টেটমেন্ট প্রায় if স্টেটমেন্টের মতোই কাজ করে, তবে শর্তটি ফলসি হলে এটি unless স্টেটমেন্টের ভেতরের কোডটি চালায়।
value = 1
unless value == 1
"1 is not equal to 1"
end
# => nil
unless value > 2
"1 is not greater than 2"
end
# => "1 is not greater than 2"
else স্টেটমেন্টif স্টেটমেন্টের সাথে মিলিয়ে else স্টেটমেন্ট ব্যবহার করা যায়।
if শাখাটি চালানো না হলে else স্টেটমেন্টটি চালানো হয়।
value = 1
if value == 1
"1 is equal to 1"
else
"1 is not equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
else
"1 is not greater than 2"
end
# => "1 is not greater than 2"
if স্টেটমেন্টের সাথে মিলিয়ে elsif স্টেটমেন্ট ব্যবহার করা যায়।
if শাখাটি চালানো না হলে এবং elsif স্টেটমেন্টের শর্তটি ট্রুথি হলে elsif স্টেটমেন্টটি চালানো হয়।
একাধিক elsif স্টেটমেন্ট একসাথে জুড়ে দেওয়া যায়, আর প্রথম যে শর্তটি ট্রুথি হবে সেটিই চালানো হবে।
if স্টেটমেন্টের শেষে একটি else স্টেটমেন্টও থাকতে পারে, যা আগের কোনো শর্তই ট্রু না হলে চলবে।
value = 1
if value == 0
"1 is equal to 0"
elsif value > 2
"1 is greater than 2"
else
"1 is not equal to 0 and 1 is not greater than 2"
end
# => "1 is not equal to 0 and 1 is not greater than 2"
if এবং unless স্টেটমেন্ট [প্রত্যয়][if-as-suffix] হিসেবেও ব্যবহার করা যায়, কোনো শর্ত ট্রু হলে এক লাইনের কোড চালাতে চাইলে এটি কাজে লাগে।
এটি করতে if বা unless স্টেটমেন্টটি যে কোডটি চালাতে চান তার পরে বসাতে হয়।
value = 1
"1 is equal to 1" if value == 1
# => 1 is equal to 1
"1 is not equal to 1" unless value == 1
# => nil