تحتوي 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
يمكن استخدام جملة 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"
if المتسلسلةيمكن استخدام جملة elsif مع جملة if.
وتُنفَّذ جملة elsif إذا لم يُنفَّذ فرع if وكان شرط جملة elsif صحيحًا.
ويمكن ربط جمل elsif ببعضها، وسيُنفَّذ أول شرط صحيح.
ويمكن أيضًا وضع جملة else في نهاية جملة if، وتعمل إذا لم يكن أيٌّ من الجمل السابقة صحيحًا.
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