Код IT Загрузка примера кода…

Ruby main.rb
class AdvancedAttributes
  # Базовые атрибуты
  attr_accessor :name, :age
  
  # Только для чтения
  attr_reader :created_at
  
  # Только для записи
  attr_writer :password
  
  # С валидацией
  def email=(value)
    if value =~ /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
      @email = value
    else
      raise ArgumentError, "Неверный формат email"
    end
  end
  
  attr_reader :email
  
  # С преобразованием
  def tags=(value)
    @tags = value.is_a?(Array) ? value : value.split(',').map(&:strip)
  end
  
  attr_reader :tags
  
  # С кэшированием
  def expensive_calculation
    @expensive_calculation ||= begin
      sleep(1)  # Имитация долгого вычисления
      rand(1000)
    end
  end
  
  def initialize(name, age)
    @name = name
    @age = age
    @created_at = Time.now
  end
end

obj = AdvancedAttributes.new("Test", 25)
obj.name = "New Name"
puts obj.name  # New Name

obj.email = "test@example.com"
puts obj.email  # test@example.com

obj.tags = "ruby, programming, oop"
puts obj.tags.inspect  # ["ruby", "programming", "oop"]

obj.tags = ["ruby", "rails"]
puts obj.tags.inspect  # ["ruby", "rails"]

result1 = obj.expensive_calculation  # Выполняется 1 секунду
result2 = obj.expensive_calculation  # Мгновенно, использует кэш
puts result1 == result2  # true
class AdvancedAttributes
  # Базовые атрибуты
  attr_accessor :name, :age
  
  # Только для чтения
  attr_reader :created_at
  
  # Только для записи
  attr_writer :password
  
  # С валидацией
  def email=(value)
    if value =~ /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
      @email = value
    else
      raise ArgumentError, "Неверный формат email"
    end
  end
  
  attr_reader :email
  
  # С преобразованием
  def tags=(value)
    @tags = value.is_a?(Array) ? value : value.split(',').map(&:strip)
  end
  
  attr_reader :tags
  
  # С кэшированием
  def expensive_calculation
    @expensive_calculation ||= begin
      sleep(1)  # Имитация долгого вычисления
      rand(1000)
    end
  end
  
  def initialize(name, age)
    @name = name
    @age = age
    @created_at = Time.now
  end
end

obj = AdvancedAttributes.new("Test", 25)
obj.name = "New Name"
puts obj.name  # New Name

obj.email = "test@example.com"
puts obj.email  # test@example.com

obj.tags = "ruby, programming, oop"
puts obj.tags.inspect  # ["ruby", "programming", "oop"]

obj.tags = ["ruby", "rails"]
puts obj.tags.inspect  # ["ruby", "rails"]

result1 = obj.expensive_calculation  # Выполняется 1 секунду
result2 = obj.expensive_calculation  # Мгновенно, использует кэш
puts result1 == result2  # true