У Ruby “setter” - це метод, який використовується для встановлення значення змінної об’єкта. Зазвичай setter використовується в об’єктно-орієнтованому програмуванні для зміни значень атрибутів (змінних) об’єкта.
У Ruby методи setter мають специфічну назву, яка включає знак рівності (=) в кінці. Наприклад, якщо у вас є клас з атрибутом name
, то відповідний setter може виглядати так:
class Person
def initialize(name)
@name = name
end
# Getter для отримання значення атрибуту name
def name
@name
end
# Setter для встановлення нового значення атрибуту name
def name=(new_name)
@name = new_name
end
end
Тепер ви можете встановити нове значення для атрибуту name
, використовуючи setter:
person = Person.new("John")
puts person.name # Виведе "John"
person.name = "Jane"
puts person.name # Тепер виведе "Jane"
Використання setter дозволяє змінювати значення атрибутів об’єкта ззовні класу, за допомогою більш зручного синтаксису, ніж прямий доступ до змінних об’єкта.
Однак у Ruby передбачено спрощений синтаксис для визначення сеттерів, використовуючи метод attr_writer. Вищезазначений приклад може бути переписаний так:
class Person
attr_writer :name
def initialize(name)
@name = name
end
end
person = Person.new("John")
person.name = "Jane"
У останньому прикладі ми використовуємо attr_writer :name
для генерації setter-методу для змінної name
. Проте, нам не буде доступний автоматично згенерований getter, тому ви не зможете використовувати puts person.name
для отримання значення name
. Для цього передбачено метод attr_accessor, яке генерує автоматично геттер і сеттер. Приклад:
class Person
attr_accessor :name
def initialize(name)
@name = name
end
end
person = Person.new("John")
person.name = "Jane"
puts person.name #отримаємо Jane