O fato não é ser ou não importante porque Ruby implementa ou não, é porque sobrecarga de métodos é simplesmente um monte de métodos diferentes que tem o mesmo nome, não tem nada de especial nisso, eu, pessoalmente, acho que isso complica muito mais do que facilita o desenvolvimento, já que esses métodos são resolvidos em tempo de compilação pelo tipo da variável que está sendo passada, então você já sabia de qualquer forma qual o método que deveria ser chamado.
Mas de qualquer forma, não faz sentido existir sobrecarga de métodos em uma linguagem que não é estaticamente tipada. A não ser que você faça uma coisa viajante como em Groovy, onde o binding de parâmetros é feito pelo tipo real que está na referência e não pelo tipo da referência, mas como em Ruby não existe declaração de tipos, isso não existe.
[quote=xandroalmeida]No mais, não concordo com parâmetros em hash e continuo achando que usar isso é gambi. Até entendo a preferencia pela legibilidade exposta pelo cv, mas o código vai ficar cheios de if else
Acredito que o uso de parâmetros opcionais seja uma forma um pouco mais limpa de fazer a coisa.[/quote]
Parâmetros opcionais dão na mesma (se tiver esse parâmetro, faz x, se não tiver, faz y) e ainda são menos explícitos do que os hashes e ainda tem uma complicação a mais que é a questão do posicionamento, usando hashes você não precisa se preocupar com a posição dos parâmetros, com parâmetros opcionais você precisa.
Um exemplo bem simples, uma função que faça a paginação de consultas no banco de dados:
def paginate( conditions, page = 1, limit = 10)
# faz qualquer coisa
end
#chamando a função pra página 2, até aqui tudo bem
paginate( 'event_id = 1', 2)
#mas e se eu quiser os primeiros 20 resultados?
paginate( 'event_id = 1', 1, 20)
#tive que repetir o valor do parametro page, mesmo mandando o mesmo valor
Fazendo assim eu teria todos os problemas resolvidos e ainda teria uma sintaxe mais amigável:
def paginate( conditions, options = {} )
options = {:page => 1, :limit => 10}.merge(options)
end
paginate( 'event_id = 1', :page => 2)
paginate( 'event_id = 1', :limit => 30)