Pessoal, na apostila rr71 (versão 14.9.25) da Caelum notei que há um problema no código do enunciado do Exercício 2 da seção 5.15:
Está assim
# Adicione na classe Franquia
def method_missing(name, *args)
@restaurantes.each do |r|
return "O restaurante #{r.nome} já foi cadastrado!"
if r.nome.eql? *args
end
return "O restaurante #{args[0]} não foi cadastrado ainda."
end
# Faça as chamadas e analise os resultados
puts franquia.já_cadastrado?("Fazano")
puts franquia.já_cadastrado?("Boteco")
Porém comigo só funcionou quando fiz assim:
def method_missing(name, *args)
@restaurantes.each do |r|
if r.nome.eql? *args
return "O restaurante #{r.nome} já foi cadastrado!"
end
end
return "O restaurante #{args[0]} não foi cadastrado ainda."
end
#(...)
puts franquia.ja_cadastrado?("Fazano")
puts franquia.ja_cadastrado?("Boteco")
Estou postando aqui, caso alguém tenha passado pelo mesmo problema.
Abraços!
Boa solução @jamesfrj!
O problema do exercício é que o código realmente não coube em uma única linha no pdf. A ideia seria usar o if na mesma linha da expressão como a seguir:
def method_missing(name, *args)
@restaurantes.each do |r|
return "O restaurante #{r.nome} já foi cadastrado!" if r.nome.eql? *args
end
return "O restaurante #{args[0]} não foi cadastrado ainda."
end
Ou seja, a expressão com return só será executada se a condição passada para o if for avaliada como verdadeira.
Ajudou?
Entendi o que você falou ricardo.valeriano. É que não sabia que dava para fazer isso dessa maneira com Ruby. Tava muito acostumado a sempre o if vir antes do resultado. No Ruby eu então posso colocar antes ou depois que dá na mesma?
Obrigado pela resposta!
Legal @jamesfrj!
Então, o Ruby permite o posicionamento do if (e do “if negado” que em Ruby pode ser escrito com a palavra chave unless) ao final de uma expressão. A princípio, você pode condicionar qualquer execução de expressão com o if ao final dela, apesar de nem sempre isso ser a forma mais legível de escrever um código. Então vale a pena avaliar caso a caso.
Boa sorte aí nos estudos e, qualquer dúvida, só dizer.