روبی چیزی به نام «عبارات کنترل جریان» دارد؛ این عبارتها برای کنترل نحوهی اجرای برنامه به کار میروند و با مقداری کار میکنند که درست یا غلط ارزیابی میشود. عملگرهایی هم وجود دارند که میتوان با آنها چنین مقادیری ساخت؛ به اینها عملگرهای مقایسه میگویند.
دو عبارت کنترلی اصلی وجود دارند که تعیین میکنند کدام کد اجرا شود و کدام نشود؛ یعنی کدام شاخه اجرا میشود.
این دو عبارتند از: 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
دستور else را میتوان همراه با دستور if به کار برد.
دستور else در صورتی اجرا میشود که شاخهی if اجرا نشده باشد.
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"
دستور elsif را میتوان همراه با دستور if به کار برد.
دستور elsif در صورتی اجرا میشود که شاخهی if اجرا نشده باشد و شرط دستور 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 و 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