الدرس 9 من 10
الوحدات والدمج
- 13 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
include Comparable و <=>
الشرح
الوحدة (module) مجموعة طرق لا تُنشأ منها كائنات، بل تُدمج في الأصناف: include Comparable داخل الصنف تضيف طرق الوحدة إليه كأنك كتبتها فيه. بهذا تتشارك أصناف متباعدة سلوكًا واحدًا دون وراثة.
وComparable تطلب منك طريقة واحدة: <=>، تُرجع سالبًا إن كان الكائن أصغر من الآخر، وصفرًا إن تساويا، وموجبًا إن كان أكبر. وتعطيك مقابلها < و> و== وbetween? وclamp. وsort وmax تستعملان <=> نفسها.
ومثال حقيقي: أرقام الإصدارات. مقارنتها نصوصًا تمضي حرفًا حرفًا، فـ "3.10.0" < "3.9.2" صحيحة لأن الحرف "1" قبل "9"، وmax على النصوص تختار "3.9.2" لا "3.10.0". حوّلها أرقامًا أوّلًا: المصفوفات تُقارن بـ <=> عنصرًا عنصرًا، فـ [3, 10, 0] <=> [3, 9, 2] تعطي 1.
المطلوب
عرّف صنف Version يُنشأ من نصّ كـ Version.new("3.10.0")، ويتضمّن Comparable، ويعرّف <=> بمقارنة الأجزاء أرقامًا، وto_s تُرجع النصّ بالشكل نفسه. ثم latest: أحدث إصدار في releases، كائنًا من Version.
معايير التصحيح
6 معايير- Version تتضمّن Comparable
- 3.10.0 أحدث من 3.9.2: أرقام لا نصوص
- == من Comparable: الإصداران المتطابقان متساويان
- between? تحصر الإصدار بين حدّين
- sort ترتّب بالأرقام، و to_s تُرجع النصّ
- latest هو 3.10.0 لا 3.9.2