الدرس 7 من 10

تعريف الدوال

هدف الدرس

المعاملات المسمّاة والدوال التي تنتهي بـ ? أو !

01

الشرح

تعرّف الدالة بـ def وتُغلقها بـ end، ولا تحتاج فيها إلى return لأنّ الدالة تُرجع قيمة آخر سطر يُنفَّذ فيها، وتبقى return للخروج من الدالة قبل نهايتها.

ويأخذ المعامل (parameter) قيمة افتراضية بعلامة = مثل def total(price, qty = 1). أما المعاملات المسمّاة (keyword arguments) فتُكتب بنقطتين مثل discount: 0، ومن يستدعي الدالة يمرّرها باسمها هكذا: total(50, 3, discount: 20)، فيُفهم السطر دون الرجوع إلى تعريف الدالة، ولا يختلط رقم برقم بجانبه.

ولأسماء الدوال في Ruby أعراف لها معنى، فالدالة التي ينتهي اسمها بـ ? تسأل سؤالًا وتُرجع true أو false مثل empty?، والتي ينتهي اسمها بـ ! نسخة «خطرة» تعدّل الكائن نفسه غالبًا، فـ strip تُرجع نصًّا جديدًا، أما strip! فتعدّل النصّ نفسه.

وانتبه إلى أنّ كثيرًا من دوال ! تُرجع nil إذا لم تجد ما تغيّره، فـ "VIP".upcase! تُرجع nil، ولذلك تتعطّل code.strip!.upcase! مع أول نصّ لا يحتاج إلى تنظيف. استعمل ! لتعديل المتغيّر نفسه فقط، ولا تعتمد على القيمة التي تُرجعها.

02

المطلوب

عرّف total(price, qty = 1, discount: 0) لتُرجع السعر مضروبًا في الكمية ناقص الخصم، وfree_shipping?(amount) لتُرجع true إذا كان المبلغ 200 فأكثر، وnormalize(code) لتُرجع النصّ بلا مسافات وبأحرف كبيرة دون أن تغيّر النصّ الذي مُرِّر إليها. ثم نظّف coupon نفسه بـ strip! وupcase!.

الفحوص

6 فحوص
  1. الدالة total تعمل بالكمية الافتراضية 1 وبلا خصم
  2. الدالة total تعمل بالكمية والخصم المسمّى
  3. الدالة free_shipping? تُرجع true أو false
  4. الدالة normalize تُرجع نصًّا جديدًا ولا تغيّر الأصل
  5. الدالة normalize تعمل مع نصّ نظيف أصلًا
  6. المتغيّر coupon نُظّف نفسه بدوال !
main.rb
المخرجاتRuby 3.4 (ruby.wasm)

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

–/6

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

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