الدرس 9 من 10

الوحدات والدمج

هدف الدرس

include Comparable و <=>

01

الشرح

الوحدة (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.

02

المطلوب

عرّف صنف Version يُنشأ من نصّ كـ Version.new("3.10.0")، ويتضمّن Comparable، ويعرّف <=> بمقارنة الأجزاء أرقامًا، وto_s تُرجع النصّ بالشكل نفسه. ثم latest: أحدث إصدار في releases، كائنًا من Version.

معايير التصحيح

6 معايير
  1. Version تتضمّن Comparable
  2. 3.10.0 أحدث من 3.9.2: أرقام لا نصوص
  3. == من Comparable: الإصداران المتطابقان متساويان
  4. between? تحصر الإصدار بين حدّين
  5. sort ترتّب بالأرقام، و to_s تُرجع النصّ
  6. latest هو 3.10.0 لا 3.9.2
main.rb
المخرجاتRuby 3.4 · ruby.wasm

جارٍ تحميل Ruby… نحو 8MB مرّة واحدة، ثم يحفظها المتصفح.

–/6

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

6 معايير في بطاقة «المطلوب».