الدرس 8 من 10
الأصناف والكائنات
- 14 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
المُنشئ initialize وattr وto_s
الشرح
الصنف (class) قالب تصنع منه كائنات، لكل كائن منها بياناته الخاصّة. تُنشئ Product.new("قهوة", 12) كائنًا وتستدعي initialize بالقيم نفسها، وفي 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 تعرض الاسم والسعر