Açúcares sintáticos do Ruby

Programadores utilizam o termo açúcares sintáticos para se referir a regras especiais, que permitem que você escreva seu código de uma maneira que não correspondem as regras normais, mais que seja mais fácil de lembrar como fazer e fica melhor.

Vamos dizer que queremos definir o nome de um cachorro. Como ponto de partida, o nome pode ser definido junto com tudo, mais em tempo de criação do objeto, como no exemplo abaixo.

 1   class NewDog
 2     def initialize(breed, name)
 3       @breed = breed
 4       @name = name
 5     end
 6     attr_reader :breed, :name   # Apenas para leitura
 7   end
 8   nd = NewDog.new('Doberman', 'Benzy')
 9   puts nd.name

Vamos reescrever o método set_name, que nos permite definir ou redefinir o nome de um cachorro existente. Também vamos rescrever o método initialize para que ele não espere um nome:

 1   class NewDog
 2     def initialize(breed)
 3       @breed = breed
 4     end
 5     attr_reader :breed, :name   # Apenas para leitura
 6     # método setter
 7     def set_name(nm)
 8       @name = nm
 9     end
10   end
11   nd = NewDog.new('Doberman')
12   nd.set_name('Benzy')
13   puts nd.name

Ruby permite que você defina métodos que terminam com um sinal de igual (=). Vamos substituir set_name com um método chamado name=

1   def name=(nm)
2     @name = nm
3   end

name= faz exatamente o que set_name faz e apesar do nome do método um pouco estranho, você pode chamá-lo como qualquer outro método:

1   nd.name=('Benzy')

Exemplo – p050newdog.rb

 1   class NewDog
 2     def initialize(breed)
 3       @breed = breed
 4     end
 5     attr_reader :breed, :name # Apenas para leitura
 6 
 7     # método setter
 8     def name=(nm)
 9       @name = nm
10     end
11   end
12 
13   nd = NewDog.new('Doberman')
14   #nd.name=('Benzy')
15   nd.name = 'Benzy'
16   puts nd.name

O sinal de igual lhe dá algo que você conhece como “atribui um valor a algo”, assim você sabe que esta lidando com um método setter. Ele ainda parece estranho, mais Ruby cuida de tudo.

Ruby lhe da um pouco de açucares sintático para chamar métodos setter.

1   nd.name=('Benzy')

você tem permissão para fazer isso:

1   nd.name = 'Benzy'

Quando o interpretador vê a mensagem “name” seguido de “=”, ele automaticamente ignora os espaços antes do sinal de igual e lê a mensagem como única, “name=” – Uma chamada para o método cujo nome é name=, o que nós definimos. Quanto ao lado direito: os parênteses são opcionais para métodos com argumentos simples, sendo assim, você pode colocar apenas ‘Benzy’ lá e ele vai ser pego como argumento para o método name=.

NO RAILS: Chamadas de métodos usando sinal de igual são comuns em aplicações Rails.

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