-
Notifications
You must be signed in to change notification settings - Fork 14
/
090_exponha_suas_variaveis_com_attribute_accessors.rb
executable file
·118 lines (77 loc) · 1.96 KB
/
090_exponha_suas_variaveis_com_attribute_accessors.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 10/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 090 - Exponha suas variáveis com attribute accessors
#
# http://ruby-doc.org/core-2.1.1/Module.html#method-i-attr_accessor
# http://ruby-doc.org/core-2.1.1/Module.html#method-i-attr_reader
# http://ruby-doc.org/core-2.1.1/Module.html#method-i-attr_writer
#
#
# Ruby possui uma maneira elegante de se expor os "getters and setters", pra
# quem veio do Java.
#
#
# Com os métodos attr_accessor, attr_reader e attr_writer é possível criar
# rapidamente os métodos que expõem o acesso às variáveis de instância
#
class Vida
attr_reader :sentido
# não se assuste, é uma simples chamada de método equivale a
# attr_reader(:sentido)
#
# Lembre-se que em Ruby, tudo é Objeto. Então uma classe também
# é um objeto da classe Class. Você pode chamar métodos dentro
# de classes
# O método initialize é o construtor. Invocado automaticamente quando
# chamamos Vida.new
def initialize
@sentido = 42
end
end
puts Vida.new.sentido # imprime 42
class Carteira
attr_accessor :dinheiro
def initialize
self.dinheiro = 99
# o método dinheiro= foi criado pela "macro" attr_accessor
# que também cirou o método dinheiro (reader)
# accessor cria o reader e o writer
end
def gastar
self.dinheiro -= 5
end
end
carteira = Carteira.new
puts carteira.dinheiro #imprime 99
carteira.gastar
puts carteira.dinheiro #imprime 94
class Pessoa
attr_writer :nome # cria o método nome=
def to_s
"Meu nome é #{@nome}"
end
end
joao = Pessoa.new
joao.nome = 'João'
puts joao # Imprime "Meu nome é João"
#
# Os accessors nos poupam o tempo de definir
# manualmente os métodos.
#
# Com um único accessor é possível definir quantas
# variáveis desejar
#
# attr_accessor :var1, :var2, :var3, :var4, :var5....
#
#
class OldWays
def var
@var
end
def var=(value)
@var=value
end
end
old_ways = OldWays.new
old_ways.var = 100
puts old_ways.var