الدرس 6 من 10

الهاش والرموز

هدف الدرس

الرموز والقيم الافتراضية

01

الشرح

الهاش (Hash) هو القاموس في Ruby، يربط كل مفتاح بقيمة مثل 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 فتُرجع هاشًا جديدًا بالمفاتيح نفسها بعد أن تغيّر قيمها.

02

المطلوب

خذ من user القيمة plan بـ fetch وقيمتها الافتراضية :basic، وnewsletter بـ fetch وقيمتها الافتراضية true، واحسب has_email بـ key?. ثم احسب من الأسعار الشهرية في prices الهاش yearly بـ transform_values، وسعر السنة فيه يساوي سعر عشرة أشهر. بعد ذلك اصنع lines من yearly بـ map بالشكل "basic: 290"، واطبع كل سطر منها بـ each.

الفحوص

6 فحوص
  1. المتغيّر plan يساوي :basic لأنّ المفتاح غير موجود
  2. قيمة newsletter تبقى false لأنّ المفتاح موجود
  3. المتغيّر has_email يساوي false، فلا يوجد مفتاح :email
  4. القاموس yearly فيه سعر عشرة أشهر لكل خطة
  5. عناصر lines بالشكل «basic: 290»
  6. طُبعت كل خطة في سطر
main.rb
المخرجاتRuby 3.4 (ruby.wasm)

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

–/6

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

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