الدرس 8 من 10
الأصناف والكائنات
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
initialize و attr و to_s
الشرح
الصنف قالب تصنع منه كائنات لكلٍّ منها بياناته. Product.new("قهوة", 12) تُنشئ كائنًا وتستدعي initialize بالوسائط نفسها، وفيها تُحفظ البيانات في متغيّرات الكائن: @name = name. العلامة @ تجعل المتغيّر يعيش مع الكائن لا مع الطريقة.
ومتغيّرات الكائن مخفية عن الخارج. attr_reader :name تكتب لك طريقة قراءة، وattr_accessor :stock قراءة وكتابة معًا. اختر الأضيق: السعر يُقرأ ولا يُعدَّل من الخارج، أما المخزون فيتغيّر. وto_s هي ما تستدعيه puts والإقحام لعرض الكائن؛ بدونها تطبع puts product شيئًا مثل #<Product:0x000…>.
والفخّ داخل الطرق: stock += qty بلا self. لا تمسّ المخزون، بل تُنشئ متغيّرًا محليًّا اسمه stock قيمته nil، فتنهار الطريقة. للكتابة استعمل @stock أو self.stock =.
المطلوب
عرّف صنف Product يُنشأ بـ Product.new(name, price, stock = 0)، وname وprice فيه للقراءة فقط وstock للقراءة والكتابة. وأضف in_stock? تُرجع true إن كان المخزون أكبر من صفر، وrestock(qty) تزيده، وto_s تُرجع الاسم والسعر بالشكل "قهوة — 12 ر.س".
معايير التصحيح
6 معايير- Product.new يحفظ الاسم والسعر
- stock يبدأ من صفر ويُكتب من الخارج
- price للقراءة فقط
- in_stock? تُرجع true أو false
- restock تزيد المخزون
- to_s تعرض الاسم والسعر