[Resolvido] - Correção do enunciado da questão 2) do Execício 5.15 da apostila rr71 da Caelum

3 respostas
jamesfrj

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!

3 Respostas

ricardo.valeriano

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?

jamesfrj

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!

ricardo.valeriano

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.

Criado 23 de julho de 2012
Ultima resposta 30 de jul. de 2012
Respostas 3
Participantes 2