Приклади коду з setter

Сеттери (setter) використовуються для забезпечення доступу до змінних об’єкта та дозволяють вам виконувати додаткову логіку при встановленні значень.

class Person
  attr_reader :name

  def initialize(name)
    @name = name
  end

  def name=(new_name)
    @name = new_name
  end
end

person = Person.new("John")
puts person.name  # Виведе "John"
person.name = "Jane"
puts person.name  # Виведе "Jane"

class Car
  attr_reader :model

  def initialize(model)
    @model = model
  end

  def model=(new_model)
    if new_model.is_a?(String) && !new_model.empty?
      @model = new_model
    else
      puts "Invalid model name"
    end
  end
end

car = Car.new("Toyota")
puts car.model  # Виведе "Toyota"
car.model = "Honda"
puts car.model  # Виведе "Honda"
car.model = ""   # Виведе "Invalid model name"

class ShoppingCart
  attr_reader :items

  def initialize
    @items = []
  end

  def add_item(item)
    @items << item
  end

  def items=(new_items)
    if new_items.is_a?(Array)
      @items = new_items
    else
      puts "Invalid items format"
    end
  end
end

cart = ShoppingCart.new
cart.add_item("Product 1")
cart.add_item("Product 2")
puts cart.items.inspect  # Виведе ["Product 1", "Product 2"]

cart.items = ["Product 3", "Product 4"]
puts cart.items.inspect  # Виведе ["Product 3", "Product 4"]
cart.items = "Invalid"   # Виведе "Invalid items format"