الدرس 6 من 10
الهاش والرموز
- 13 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
مفاتيح رمزية وقيم افتراضية
الشرح
الهاش (Hash) يربط مفتاحًا بقيمة: user = { name: "ليان", city: "الرياض" }. والمفاتيح هنا رموز (Symbol)، وname: اختصار لـ :name =>. الرمز اسم ثابت، وكل :name في البرنامج كائن واحد، فهو المفتاح المعتاد في Ruby. لكنه لا يساوي النصّ: user["name"] تُرجع nil لأن المفتاح :name.
والمفتاح الغائب لا يرمي خطأً: user[:plan] تُرجع nil بصمت. وfetch(:plan, :basic) تُرجع القيمة إن وُجد المفتاح والافتراضي إن غاب، وkey?(:plan) سؤال صريح عن الوجود. والفخّ في user[:newsletter] || true: إن كانت القيمة المحفوظة false استبدلتها || بـ true وألغت اختيار المستخدم. أما fetch فتفرّق بين «غائب» و«موجود وقيمته false».
وتمرّ على الأزواج بـ each { |key, value| ... }. وmap على الهاش تُرجع مصفوفة لا هاشًا، أما transform_values فتُرجع هاشًا جديدًا بالمفاتيح نفسها وقيمها محوّلة.
المطلوب
من user: plan بـ fetch وافتراضيّه :basic، وnewsletter بـ fetch وافتراضيّه true، وhas_email بـ key?. ومن prices الشهرية: yearly بـ transform_values، والسنة بسعر عشرة أشهر. ثم lines من yearly بـ map بالشكل "basic: 290"، واطبع كل سطر منها بـ each.
معايير التصحيح
6 معايير- plan افتراضيّه :basic لأن المفتاح غائب
- newsletter تبقى false: المفتاح موجود
- has_email: لا مفتاح :email
- yearly بسعر عشرة أشهر لكل خطة
- lines بالشكل «basic: 290»
- طُبعت كل خطة في سطر