الدرس 3 من 10

الجمل الشرطية

هدف الدرس

التفرّع بـ if وunless وما يُعامَل معاملة false

01

الشرح

تنفّذ if ما بداخلها إذا تحقّق شرطها، وتضيف elsif شرطًا آخر يُفحص إذا لم يتحقّق ما قبله، وتأخذ else كل ما بقي، ثم تُغلق end السلسلة كلها. وتفحص Ruby الفروع بالترتيب ولا تنفّذ إلا أول فرع يتحقّق شرطه، لذلك ابدأ بالحدّ الأعلى. وif نفسها تُرجع قيمة آخر سطر في الفرع الذي نُفّذ، فتستطيع أن تحفظ نتيجتها في متغيّر مباشرة.

وللشرط القصير طرق أقصر، فالعامل الثلاثي (ternary) cond ? a : b يختار بين قيمتين في سطر واحد، وتستطيع أن تكتب الشرط في آخر السطر هكذا: puts "مرحبًا" if logged_in. أما unless فهي عكس if، تنفّذ ما بعدها إذا لم يتحقّق الشرط، وقراءتها أوضح من if !.

وانتبه إن كنت قادمًا من Python أو JavaScript، ففي Ruby قيمتان فقط تُعامَلان في الشرط معاملة false، هما nil وfalse، أما 0 و"" والمصفوفة الفارغة فكلها تُعامَل معاملة true. لذلك يتحقّق if stock حتى لو كان المخزون صفرًا، وتُرجع nickname || "ضيف" النصّ الفارغ نفسه، فاسأل صراحةً بـ stock.zero? وnickname.empty?.

02

المطلوب

احسب shipping بسلسلة if وelsif، فيكون 0 إذا كان الطلب 200 فأكثر، و15 إذا كان من 100 إلى أقلّ من 200، و25 فيما سوى ذلك. واجعل status بالعامل الثلاثي «متوفّر» إذا بقي في المخزن شيء، وإلا فاجعله «نفد». ويكون display_name هو nickname، أو «ضيف» إذا كان فارغًا. ثم اطبع «أعد الطلب من المورّد» إذا لم يبقَ في المخزن شيء، واكتب الشرط بـ unless في آخر السطر.

الفحوص

6 فحوص
  1. المتغيّر shipping يساوي 15 لطلب قيمته 180
  2. المتغيّر shipping محسوب بسلسلة if وelsif وليس مكتوبًا بيدك
  3. قيمة status هي «نفد»، فالصفر ليس false في Ruby
  4. قيمة display_name هي «ضيف»، فالنصّ الفارغ ليس false أيضًا
  5. طُبع تنبيه المورّد
  6. التنبيه مكتوب بـ unless في آخر السطر
main.rb
المخرجاتRuby 3.4 (ruby.wasm)

نحمّل بيئة Ruby الآن، وحجمها نحو 8 ميغابايت. يحدث هذا مرّة واحدة فقط، ثم يحفظها متصفّحك.

–/6

يبدأ الفحص حين تجهز البيئة.

تجد 6 فحوص في بطاقة «المطلوب».