Про концепцію Змінні екземпляра
Ключові моменти:
- Коли метод
.new класу викликають, щоб створити екземпляр обʼєкта, методу .initialize передають усі аргументи для ініціалізації стану цього екземпляра.
- Назви змінних екземпляра мають префікс
@.
- Змінні екземпляра типово дорівнюють
nil, доки їм явно не присвоять інше значення.
- Змінні екземпляра типово приватні, і працювати з ними слід через гетери й сетери
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- Методи, назви яких закінчуються на
=, Ruby розпізнає як сетери, і вони дають змогу скористатися «синтаксичним цукром» присвоєння, наприклад Backpack.new("Sven").owner = "Ayah".
Звернімо увагу на пробіл між owner і =, тоді як справжня назва методу - owner=.
- Гетери й сетери можна створити за допомогою методів
attr_reader, attr_writer та attr_accessor:
-
attr_reader: створює гетери для перелічених символів
-
attr_writer: створює сетери для перелічених символів
-
attr_accessor: створює гетери й сетери для перелічених символів
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- Чому варто використовувати гетери й сетери, а не змінну екземпляра напряму?
- Якщо в попередньому прикладі була помилка в написанні (ми називаємо її «одруківка»), наприклад
@ownar, то код мовчки не спрацював би, що могло б занести в систему bug.
- Гетери й сетери роблять це явним і викликають помилку, коли є одруківка.
Джерела
Ініціалізація екземплярів обʼєктів
Змінні екземпляра