المسارات
/
Ruby
Ruby
/
التمارين
/
مدينة الملاهي
مدينة الملاهي

مدينة الملاهي

تمرين تعلّمي

مقدمة

متغيرات الكائن

يمكن للكائنات أن تحتفظ بحالتها الخاصة عبر تعيين متغيرات الكائن. تعيش هذه المتغيرات داخل الكائن، وتُستخدم عادةً لتخزين بعض الحالة الداخلية.

تبدأ متغيرات الكائن دائمًا بعلامة @. يمكنك إنشاء متغير كائن جديد بتعيين متغير يبدأ بـ @. على سبيل المثال:

class Repeater
  def hear(something)
    # Save what's been heard into a new instance variable called @heard
    @heard = something
  end

  def repeat
    # Return the value of the instance variable
    @heard
  end
end

repeater = Repeater.new
repeater.hear("Hello, friend!")
print repeater.repeat # Prints "Hello, friend!"

عادةً ما تُعيّن الكائنات حالتها الأولية في طريقة initialize، وهي طريقة تُستدعى تلقائيًا عند استدعاء new على صنف.

class Airplane
  def initialize
    @wings = 2
  end

  def wings
    @wings
  end
end

plane = Airplane.new
plane.wings # returns 2

يمكن لطريقة initialize أيضًا أن تأخذ وسائط، بحيث يبدأ كل كائن بحالة مخصصة:

class Suitcase
  def initialize(locked)
    @locked = locked
  end
end

من الممارسات الجيدة أن تعتبر متغيرات الكائن خاصة، بحيث لا تُقرأ ولا تُكتب من الخارج. وبدلًا من ذلك، نعرّف طرقًا للحصول على قيمها وتعيينها. على سبيل المثال:

class Suitcase
  def initialize
    @locked = false
  end

  def locked? # Query methods should be named with a trailing `?`
    @locked
  end

  def lock! # Methods which mutate state should have trailing `!`
    @locked = true
  end
end

suitcase = Suitcase.new
suitcase.locked? # false
suitcase.lock!
suitcase.locked? # true

Nil

Nil كلمة إنجليزية تعني «لا شيء» أو «صفر». في Ruby، يُستخدم nil للتعبير عن غياب الكائن. وفي لغات برمجة أخرى، قد تؤدي قيم مثل null أو none دورًا مشابهًا.

# I do not have a favorite color
favorite_color = nil

يمنح Ruby أي متغير كائن القيمة الافتراضية nil عند أول ظهور له، إلى أن تُسند إليه قيمة أخرى.

print @favourite_color # prints nil
@favourite_color = "blue"
print @favourite_color # prints "blue"

التعليمات

بصفتك تعمل في مدينة ملاهٍ، أُعطيت مواصفات لتصميم نظام لإدارة الحضور والألعاب. طُلب منك تصميم نموذج للـ Attendee (الشخص الذي يزور المدينة).

1. أنشئ كائنات Attendee جديدة

نفّذ الطريقة Attendee#initialize في الصنف Attendee، ويجب أن تأخذ الطول (بالسنتيمتر) وتخزّنه في متغير نسخة.

Attendee.new(106)
# => #<Attendee:0x000055c33e6c7e18 @height=106>

2. كم يبلغ طول الحاضر؟

نفّذ الدالة الجالبة Attendee#height في الصنف Attendee، ويجب أن تُرجع طول النسخة.

Attendee.new(106).height
# => 106

3. ما هو معرّف تذكرة الألعاب؟

لم يشترِ جميع الحاضرين تذكرة ألعاب، لكننا نحتاج إلى معرفة ما إذا كانت لديهم تذكرة أم لا. نفّذ الدالة الجالبة Attendee#pass_id في الصنف Attendee، ويجب أن تُرجع قيمة pass_id الخاصة بالنسخة، أو nil إذا لم تكن لدى الحاضر تذكرة.

Attendee.new(106).pass_id
# => nil

4. اسمح للأشخاص بشراء تذكرة

نفّذ Attendee#issue_pass! لتغيير حالة النسخة، واضبط متغير نسخة معرّف التذكرة على الوسيط. ويجب أن تُرجع معرّف التذكرة.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.pass_id
# => 42

5. أبطِل التذكرة

يخالف بعض الزوار القواعد بسلوك غير آمن، لذا تريد المدينة أن تكون قادرة على إبطال التذاكر. نفّذ Attendee#revoke_pass! لتغيير حالة النسخة، واضبط معرّف التذكرة على nil.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Ruby Exercism

مستعد لبدء مدينة الملاهي؟

سجّل في Exercism لتتعلّم وتتقن Ruby عبر 21 مفهومًا121 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.