Как создать getter и setter в Ruby?

Пользователь

от richard , в категории: Ruby , 2 года назад

Как создать getter и setter в Ruby?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dmitrypro77 , 2 года назад

@richard Вы можете использовать краткий синтакс getter и setter: attr_accessor или вручную создать getter и setter в Ruby, ниже пример:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Короткая версия
class User
  attr_accessor :username

  def initialize(username)
    @username = username
  end
end
user = User.new('dmitrypro77')
# Вывод: dmitrypro77
print(user.username) # вызов getter

user.username = "test"  # вызов setter
# Вывод: test
print(user.username) # вызов getter


Если Вы хотите создать getter и setter (может быть полезно если какая то дополнительная логика в setter или getter):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Полная версия
class User
  def initialize(username)
    @username = username
  end

  def username  # GETTER
    @username
  end

  def username=(name)  # SETTER
    @username = name
  end
end


Всегда открыт для интересных проектов. Ссылки на мои соц. сети в профиле.

Пользователь

от sherwood_littel , год назад

@richard 

В Ruby getter и setter могут быть созданы с помощью специальных методов attr_reader, attr_writer и attr_accessor.


attr_reader создает только getter, который позволяет получить значение переменной экземпляра класса, но не изменять ее. Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class MyClass
  attr_reader :my_variable
  
  def initialize(value)
    @my_variable = value
  end
end

obj = MyClass.new("Hello")
puts obj.my_variable #=> "Hello"


attr_writer создает только setter, который позволяет изменять значение переменной экземпляра класса, но не получать ее значение. Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class MyClass
  attr_writer :my_variable
  
  def do_something
    @my_variable = "World"
  end
end

obj = MyClass.new
obj.my_variable = "Hello"
puts obj.do_something #=> "World"


attr_accessor создает и getter, и setter, позволяя получить и изменять значение переменной экземпляра класса. Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class MyClass
  attr_accessor :my_variable
  
  def do_something
    @my_variable = "World"
  end
end

obj = MyClass.new
obj.my_variable = "Hello"
puts obj.my_variable #=> "Hello"
obj.do_something
puts obj.my_variable #=> "World"


Также возможно создать getter и setter с помощью обычных методов. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class MyClass
  def my_variable
    @my_variable
  end
  
  def my_variable=(value)
    @my_variable = value
  end
end

obj = MyClass.new
obj.my_variable = "Hello"
puts obj.my_variable #=> "Hello"


Но использование методов attr_reader, attr_writer и attr_accessor более предпочтительно, так как это более простой и понятный способ создания getter и setter в Ruby.