Constantes

Uma constante Ruby é como uma variável, exceto que seu valor supostamente deve se manter constante enquanto o programa durar. O interpretador Ruby na verdade não força a constância de constantes, mas ele avisa caso um programa altere o valor de uma constante, como mostrado nesse exemplo trivial – p054constwarn.rb

1   # p054constwarn.rb
2   A_CONST = 10
3   A_CONST = 20

Produz um aviso (warning):

1   p054constwarn.rb:3: warning: already initialized constant A_CONST
2   # aviso: a constante A_CONST já foi inicializada

Do ponto de vista léxico, o nome de constantes se parece com o de variáveis locais, exceto pelo fato de começarem uma letra em maiúsculo. Por convenção, a maioria das constantes são escritas com todas as letras em maiúsculas e underscores são usados para separar palavras, DESSA_FORMA. Os nomes de módulo e de classes Ruby são também constantes, mas são convencionalmente escritos usando letras maiúsculas no início de cada palavra (o chamado camel case), AssimPorExemplo.

Perceba que constantes não existem até que um valor seja associado as mesmas.

Embora constantes não devam ser alteradas, você pode modificar o estado interno dos objetos que elas referenciam, como visto no exemplo p055constalter.rb:

1   # p055constalter.rb
2   A_CONST = "Doshi"
3   B_CONST = A_CONST
4   A_CONST[0] = "J" # altera a string referenciada pela constante
5   puts A_CONST # mostra Joshi
6   puts B_CONST # também mostra Joshi

NO RAILS: Você pode encontrar exemplos desse tipo de operação (modificação) no código fonte do Rails, onde constantes aparecem prominentemente e os objetos que elas representam passam por mudanças com certa frequência.

Observe:

O programa p056const.rb mostra tudo isso:

 1   CONSTANTE_EXTERNA = 99
 2 
 3   class Constante
 4       def pega_constante
 5         CONSTANTE
 6       end
 7       CONSTANTE = CONSTANTE_EXTERNA + 1
 8   end
 9 
10   puts Constante.new.pega_constante
11   puts Constante::CONSTANTE
12   puts ::CONSTANTE_EXTERNA
13   puts Constante::NOVA_CONSTANTE = 123

Outro exemplo elaborado sobre métodos de uma classe é o p057mymethods2.rb. Nesse exemplo nós também vemos como escrever um método de classe.

 1   # p057mymethods2.rb
 2   # variávais e métodos começam com letra minúscula
 3   $glob = 5 # variáveis globais começam com $
 4   class TestVar # nome de classe é constante, começa com maiúscula
 5    @@cla = 6 # variáveis de classe começam com @@
 6    CONST_VAL = 7 # estilo de constante, caixa alta, underscore
 7    def initialize(x) # construtor
 8     @inst = x # variáveis de instância começam com @
 9     @@cla += 1 # cada objeto compartilha @@cla
10    end
11    def self.cla # método de classe, getter
12     @@cla
13    end
14    def self.cla=(y) # método de classe, setter, também TestVar.
15     @@cla = y
16    end
17    def inst # método de instância, getter
18     @inst
19    end
20    def inst=(i) # método de instância, setter
21     @inst = i
22    end
23   end
24   puts $glob
25   test = TestVar.new(3) # chama construtor
26   puts TestVar.cla # chma getter
27   puts test.inspect # dá o ID do objeto e variáveis de instância
28   TestVar.cla = 4 # chama setter
29   test.inst=8 # chama setter
30   puts TestVar.cla
31   puts test.inst # chama getter
32   other = TestVar.new(17)
33   puts other.inspect
34   puts TestVar.cla

Sumário

Listei todos os pontos importantes que você precisa se lembrar após ter completado os seguintes tópicos: Serialização de Objetos, Módulos/Mixins, Self e Constantes.

Logo do Guru-SP

Este material tem como base o tutorial do RubyLearning.com de Satish Talim e foi traduzido por membros do GURU-SP com a permissão do autor.

Ajude o RubyLearning participando em algum dos cursos pagos ou fazendo uma doação para o projeto

Voltar para o índice