شهربازی

شهربازی

تمرین یادگیری

مقدمه

متغیر نمونه

شیءها می‌توانند با تعیین متغیرهای نمونه، وضعیت خودشان را نگه دارند. این متغیرها درون یک شیء قرار دارند و معمولاً برای ذخیره‌ی مقداری وضعیت درونی به کار می‌روند.

متغیرهای نمونه همیشه با @ شروع می‌شوند. می‌توانید با تعیین متغیری که با یک @ شروع می‌شود، یک متغیر نمونه‌ی تازه بسازید. برای مثال:

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"

دستورالعمل‌ها

شما در یک شهربازی کار می‌کنید و مشخصاتی به شما داده شده است تا سامانه‌ای را برای مدیریت ورود بازدیدکنندگان و وسایل بازی طراحی کنید. وظیفه‌ی شما مدل‌سازی بازدیدکننده (شخصی که از پارک بازدید می‌کند) است.

1. بازدیدکننده‌های جدید بسازید

متد 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.