الدرس 7 من 10
تعريف الطرق
- 13 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
وسائط مسمّاة و ? و !
الشرح
تعرّف الطريقة بـ def وتُغلقها بـ end. ولا تحتاج return: قيمة آخر سطر يُنفَّذ فيها هي ما تُرجعه، وreturn تبقى للخروج المبكّر.
والوسيط يأخذ قيمة افتراضية بعلامة =: def total(price, qty = 1). والوسائط المسمّاة تُكتب بنقطتين: discount: 0، ويمرّرها المستدعي باسمها: total(50, 3, discount: 20)، فيُفهم السطر دون الرجوع إلى التعريف، ولا يختلط رقمان متجاوران.
وللأسماء أعراف تحمل معنى: الطريقة المنتهية بـ ? سؤال يُرجع true أو false، مثل empty?. والمنتهية بـ ! نسخة «خطرة» تعدّل الكائن في مكانه غالبًا: strip تُرجع نصًّا جديدًا، وstrip! تعدّل النصّ نفسه.
والفخّ أن كثيرًا من طرق ! تُرجع nil إن لم تجد ما تغيّره: "VIP".upcase! تُرجع nil، فـ code.strip!.upcase! تنهار مع أول رمز نظيف. استعمل ! لتعديل متغيّر في مكانه، ولا تعتمد على ما تُرجعه.
المطلوب
عرّف total(price, qty = 1, discount: 0) تُرجع السعر في الكمية ناقص الخصم، وfree_shipping?(amount) تُرجع true من 200 فأكثر، وnormalize(code) تُرجع الرمز بلا مسافات وبأحرف كبيرة دون أن تمسّ النصّ الذي مُرِّر إليها. ثم نظّف coupon في مكانه بـ strip! وupcase!.
معايير التصحيح
6 معايير- total بالكمية الافتراضية 1 وبلا خصم
- total بالكمية والخصم المسمّى
- free_shipping? تُرجع true أو false
- normalize تُرجع نصًّا جديدًا ولا تمسّ الأصل
- normalize تعمل مع رمز نظيف أصلًا
- coupon نُظّف في مكانه بـ !