دربارهی متغیر نمونه
نکات کلیدی:
- وقتی متد
.new یک کلاس برای ساختن یک نمونهی شیء فراخوانی میشود، همهی آرگومانها به متد .initialize داده میشوند تا وضعیت آن نمونه مقداردهی اولیه شود.
- اسم متغیرهای نمونه با
@ شروع میشود.
- متغیرهای نمونه بهطور پیشفرض
nil هستند تا زمانی که بهصراحت مقداردهی شوند.
- متغیرهای نمونه بهطور پیشفرض خصوصیاند و باید آنها را با getter و setter مدیریت کرد.
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- متدهایی که اسمشان با
= تمام میشود، در Ruby بهعنوان setter شناخته میشوند و امکان استفاده از نحو انتساب را به شکل «syntactic sugar» فراهم میکنند، مثلاً Backpack.new("Sven").owner = "Ayah".
به فاصلهی بین owner و = دقت کنید، در حالی که اسم واقعی متد owner= است.
- getterها و setterها را میتوان با متدهای
attr_reader، attr_writer و attr_accessor ساخت:
-
attr_reader: برای نمادهای فهرستشده getter میسازد
-
attr_writer: برای نمادهای فهرستشده setter میسازد
-
attr_accessor: برای نمادهای فهرستشده هم getter و هم setter میسازد
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- چرا بهجای خود متغیر نمونه بهطور مستقیم، از getter و setter استفاده کنیم؟
- اگر در مثال قبلی یک خطای تایپی رخ داده باشد (به اینها «typo» میگوییم)، مثلاً
@ownar، برنامه بیصدا شکست میخورد و ممکن است یک bug به سیستم وارد شود.
- getterها و setterها این موضوع را صریح میکنند و اگر خطای تایپی رخ دهد، خطا ایجاد میکنند
منابع
مقداردهی اولیهی نمونههای شیء
متغیرهای نمونه