الدرس 8 من 10

الأصناف والكائنات

هدف الدرس

المُنشئ initialize وattr وto_s

01

الشرح

الصنف (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 = حين تريد أن تكتب فيه.

02

المطلوب

عرّف صنف Product الذي يُنشأ بـ Product.new(name, price, stock = 0)، واجعل name وprice فيه للقراءة فقط وstock للقراءة والكتابة. ثم أضف in_stock? لتُرجع true إذا كان المخزون أكبر من صفر، وrestock(qty) لتزيده، وto_s لتُرجع الاسم والسعر بالشكل "قهوة — 12 ر.س".

الفحوص

6 فحوص
  1. الدالة Product.new تحفظ الاسم والسعر
  2. المخزون stock يبدأ من صفر ويمكن تغييره من الخارج
  3. السعر price للقراءة فقط
  4. الدالة in_stock? تُرجع true أو false
  5. الدالة restock تزيد المخزون
  6. الدالة to_s تعرض الاسم والسعر
main.rb
المخرجاتRuby 3.4 (ruby.wasm)

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

–/6

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

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