Named Parameter em Ruby
Introdução
Depois de me cansar daquela gambiarra de usar hash para simular named parameter em ruby, decidi criar uma gem para amenizar a trabalhosa gambiarra.
Instalando
Antes de qualquer coisa temos que instalar a gem named_parameter:
gem install named_parameter |
Como Usar
O Básico
Após instalar a gem, só o que precisamos fazer é extender o módulo NamedParameter e em troca ganharemos o método named que usaremos antes da definição do método para dizer que este terá parâmetros nomeados, dessa maneira:
1 2 3 4 5 6 7 8 9 10 11 12 |
require 'rubygems' require 'named_parameter' class Pessoa extend NamedParameter named def fala(frase) puts "Pessoa falou: #{frase}" end end Pessoa.new.fala frase: "Legal!" # => Pessoa falou: Legal! |
Se esse mesmo código fosse implementado da forma tradicional seria assim:
1 2 3 4 5 6 7 8 9 |
class Pessoa def fala(args={}) frase = args[:frase] puts "Pessoa falou: #{frase}" end end Pessoa.new.fala frase: "Nem tao legal :(" # => Pessoa falou: Nem tao legal :( |
Parâmetros Opcionais
Caso queiramos utilizar parâmetros opcionais, não teremos problema:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
require 'rubygems' require 'named_parameter' class Pessoa extend NamedParameter named def fala(frase="Estou Mudo") puts "Pessoa falou: #{frase}" end end Pessoa.new.fala # => Pessoa falou: Estou Mudo Pessoa.new.fala frase: "Muito Legal!" # => Pessoa falou: Muito Legal! |
Múltiplos Parâmetros
Também podemos definir múltiplos parâmetros:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
require 'rubygems' require 'named_parameter' class Ponto extend NamedParameter named def mover_para(x,y,z=0) puts "Movido para: [#{x},#{y},#{z}]" end end Ponto.new.mover_para(y: 30,x: 50) # => Movido para: [50,30,0] Ponto.new.mover_para(z: 10, y: 30,x: 50) # => Movido para: [50,30,10] |
Cuidado!
Antes de usar esta gem, lembre-se que ao extender o módulo NamedParameter, o callback method_added é sobreescrito. Caso seja necessário sobreescrever esse callback e usar o NamedParameter na mesma classe é necessário utilizar around alias!
Conclusão
O código fonte da gem está no github: https://github.com/HugoLnx/named_parameter. Os testes foram escritos utilizando RSpec. Quem quiser contribuir pode mandar um pull request (com testes por favor).