Sobrecarregando métodos em Ruby

Você quer criar duas versões diferentes de um método possuindo o mesmo nome: dois métodos que diferem entre si pelos argumentos que possuem. Porém, uma classe Ruby pode ter somente um método com um determinado nome (se você definir um método com o mesmo nome duas vezes, a definição do último método prevalece conforme visto no exemplo p038or.rb no tópico Sobrescrevendo métodos em Ruby). Dentro daquele método simples, então, você pode por a lógica que varia dependendo de quantos e que tipos de objetos foram passados a ele como argumentos.

Aqui está uma classe Retangulo que representa uma forma retangular num plano. Você pode instanciar um Retangulo de um dos dois jeitos: passando as coordenadas de seus cantos superior esquerdo e inferior direito, ou passando as coordenadas de seu canto superior esquerdo junto com seu tamanho e largura. Há apenas um método initialize, mas você pode chamá-lo como se houvessem dois.

 1 # O construtor do Retangulo aceita argumento em ambas
 2 # das seguintes formas:
 3 #   Retangulo.new([x_superior, y_esquerda], tamanho, largura)
 4 #   Retangulo.new([x_superior, y_esquerda], [x_inferior, y_direita])
 5 class Retangulo
 6   def initialize(*args)
 7     if args.size < 2  || args.size > 3
 8       # modificar isto para lançar exceção, depois
 9       puts 'Este metodo recebe 2 ou 3 argumentos'
10     else
11       if args.size == 2
12         puts 'Dois argumentos'
13       else
14         puts 'Tres argumentos'
15       end
16     end
17   end
18 end
19 
20 Retangulo.new([10, 23], 4, 10)
21 Retangulo.new([10, 23], [14, 13])

O programa p037retangulo.rb, acima, está incompleto da perspectiva da classe Retangulo, mas é suficiente para demonstrar como é feita a sobrecarga de métodos. Lembre-se, também, que o método initialize recebe um número variável de argumentos.

Sumário

Eu listei todos os pontos importantes que você precisa lembrar depois de concluir os seguintes tópicos: Incluindo outros arquivos, Classes abertas em Ruby, Herança, Sobrescrevendo métodos, Sobrecarregando métodos.

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