2
respostas

Padrão para invocar funções ?

Estou fazendo o segundo curso de RUBY e eu estava com erro quando tentava fazer os códigos iguais aos do vídeo. Quando meu código estava assim:

def palavramascarada (palavra_secreta, chutes) mascara = "" for letra in palavra_secreta.chars if chutes.include? letra mascara << letra else mascara << "" end end mascaraend

Ele retornava a seguinte mensagem:

C:/Users/Meu computador/Desktop/ALURA/RUBY/FORCA.rb:5:in palavra_mascarada': undefined methodchars' for []:Array (NoMethodError) from C:/Users/Meu computador/Desktop/ALURA/RUBY/FORCA.rb:37:in joga' from C:/Users/Meu computador/Desktop/ALURA/RUBY/FORCA.rb:74:inblock in jogo_da_forca' from C:/Users/Meu computador/Desktop/ALURA/RUBY/FORCA.rb:73:in loop' from C:/Users/Meu computador/Desktop/ALURA/RUBY/FORCA.rb:73:injogo_da_forca' from main.rb:3:in `'

Então fiquei alguns minutos tentando entender o que eu havia feito de errado e comecei a comparar meu código com o do instrutor do vídeo. Eis que a única diferença era na ordem do que eu estava invocando:

def palavra_mascarada (palavra_secreta, chutes)def palavra_mascarada (chutes, palavra_secreta)

Então minha dúvida é, existe uma hierarquia ou um padrão de quem devo invocar primeiro nas funções?

Desde já agradeço! ;)

2 respostas

Oi Felipe,

Não tem diferença na ordem que você declara não, a única coisa é que se você declarou com uma ordem diferente, você deve passar os argumentos na mesma ordem da declaração quando chamar o método palavra_mascarada.

O que está acontecendo é que provalvemente na hora de chamar você passou que nem a ordem do vídeo ao invés de ter passado na ordem que você declarou.

Abraço!

A melhor maneira de descobrir é testando. Então, será que a ordem importa? vamos fazer um código de teste.

def parametro1
  return 4
end

def parametro2
  return 6
end

def parametro3
  return 8
end

def teste(parametro1, parametro2, parametro3)
  numero3 = parametro3
  numero1 = parametro1
  numero2 = parametro2
  puts numero1 + numero3 + numero2
end

def rodar_experimento #com os parametros em outra ordem (2 3 1)
  teste(parametro2, parametro3, parametro1)
  puts "Funcionou"
end

def rodar_experimento2 #com os parametros em outra ordem diferente (3 1 2)
  teste(parametro3, parametro1, parametro2)
  puts "Funcionou de novo"
end

rodar_experimento
rodar_experimento2

Como visto no teste, a ordem dos parâmetros não fez diferença, tanto na definição da função quanto na invocação dela.

Uma dúvida de minha parte, seu código funcionou depois de ter trocado a ordem, ou continuou dando erro? As vezes o problema está em lugares que não percebemos, mesmo sendo problemas bem simples e bobos (quase sempre).

Se o problema ainda não foi resolvido, peço para que coloque seu código aqui para que vejamos e possamos ajudar melhor.