/ / Configurando variável de instância não inicializada - ruby, classe, estilo de codificação, variáveis ​​de instância

Definindo a variável de instância não inicializada - ruby, classe, estilo de codificação, variáveis ​​de instância

É elegante usar variáveis ​​de instância em uma classe que não são inicializadas e defini-las usando outros métodos? Ou talvez haja uma maneira melhor de fazer isso?

class Klass
def initialize(a)
@a = a
end

def set_b(b)
@b = b
end
end

Respostas:

1 para resposta № 1

Em contraste com outras linguagens, se você não inicializar uma variável de instância, ela sempre será nil (enquanto em alguns outros idiomas você pode obter algo indefinido).

Contanto que outros métodos de Klass não dependa da variável de instância realmente ter um valor, isso deve estar ok.

Quanto a getters e setters, existem attr_accessor, attr_reader e attr_writer (Vejo os docs).

class Klass
attr_accessor :b
# there"s also attr_reader and attr_writer

def initialize(a)
@a = a
end
end

k = Klass.new :foo
k.b = :bar

k.b
#=> :bar

k.a
#=> undefined method `a" for #<Klass:0x007f842a17c0e0 @a=:foo, @b=:bar> (NoMethodError)

0 para resposta № 2

A maneira como você está fazendo funciona, mas Ruby definiu attr_accessor, attr_reader e attr_writer para aquele propósito.

attr_reader: criar método para ler "a"

attr_writer: criar método para escrever "a"

attr_accessor: crie métodos para ler e escrever "a"

Acho que a melhor maneira de fazer isso é usar attr_accessor:a

class Klass
attr_accessor:a
def initialize(a)
@a = a
end
end

Então você pode fazer:

k = Klass.new "foo" #example
k.a = "bar"