Структура

В пролшом уроке мы поняли, что создавая новый класс мы создаем экземпляр класса Class, но это не единственный способ создать такой экземпляр. Struct позволяем нам создать новый класс прямо во время выполнения нашей программы.

# Каждый символ в аргументах это новая переменная
Person = Struct.new(:name, :age, :address)
person = Person.new('John', 23, 'Moscow')
p person # Person(name = John, age = 23, address = Moscow)
puts person.age # 23

Помимо создания переменных мы можем также создавать и методы, инициализируя их в блоке кода

Person = Struct.new(:name, :age, :address) do
  def get_full_info
    "I'm #{name}, #{age} y.o. I'm from #{address}"  
  end
end
person = Person.new('John', 23, 'Moscow')
puts person.get_full_info # I'm John, 23 y.o. I'm from Moscow

Мы также можем наследоваться от структуры

# В данном случае объект Struct заменяет конструктор у класса
class Person < Struct.new(:name, :age, :address)
  def get_full_info
    "I'm #{name}, #{age} y.o. I'm from #{address}"  
  end
end

Но все таки не следует делать такое наследование в реальной практике, так как есть аспекты, которые нарушают принципы ООП:

  • при создании объекта нашего класса необязательно передавать все аргументы

  • Все атрибуты нашего класса будут иметь public доступ

В основном структуры понадобятся, когда необходимо создать временный класс, который не будет использоваться в других местах программы.

Дополнительный материал

Last updated