Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Boas Práticas

Anteriormente, eu externei que estava tendo uma dificuldade em desenvolver um código e o Felipe me auxiliou, segue abaixo o código desenvolvido seguindo a sugestão:

#nome do arquivo: dado_privado3c4.rb
def pegar_nome
  puts "Qual o seu nome?"
  informar_nome = gets.chomp
end

def pegar_idade
  puts "Quantos anos você tem?"
  informar_idade = gets.chomp.to_i
end

def imprimir_dados(nome,idade)
  puts "\n" + "seus dados foram armazenados".upcase
  puts nome.upcase + " você tem " + idade.to_s + " anos de idade." + " teste concluído.".upcase
end

def o_jogo(nome,idade)
    menor = idade<18
    if menor
      puts "\n" + nome.upcase + " que pena você não tem idade para participar do jogo..."
      return true
    else
      puts "\n" + nome.upcase + " gostaria de participar do jogo de matemática? (sim/nao)"
      confirma = gets.chomp
       if confirma == "nao"
         puts "\n" + "Ok " + nome.upcase + " , até a próxima oportunidade..." 
         return false
       else
         puts "\n" + nome.upcase + " vamos testar seu conhecimento de matemática, começaremos com algo simples"
           if idade >= 18
               limite = 3
               for tentativa in 1..limite
                  acertou = teste_de_matematica
                  break if verificar_se_acertou(nome,acertou,tentativa,limite)
               end
           end               
       end
   end
end

def teste_de_matematica
  puts "Qual o resultado da equação x = 9 +8"
  soma = gets.chomp.to_i
end

def verificar_se_acertou(nome,acertou,tentativa,limite)
    if acertou==17
       puts "Você acertou!!!"
       return true
    else
        if tentativa == limite
          puts "\n" + nome.upcase + " você precisa estudar mais e tentar novamente."
          return false
        end
       resta = limite-tentativa
       puts "Você ainda tem " + resta.to_s + " tentativas"
    end
end

nome = pegar_nome
idade = pegar_idade
imprimir_dados(nome,idade)
o_jogo(nome,idade)

Entretanto, não consegui prosseguir porque para mim não havia lógica para que o código que eu tentei desenvolver não se comportasse como o presentado acima. Depois de muito tempo analisando o código que havia desenvolvido, descobri a falha e também passou a comportar-se de forma correta. Segue abaixo a minha versão:

# nome do arquivo: dado_privado3c3.rb
def pegar_nome
  puts "Qual o seu nome?"
  informar_nome = gets.chomp
end

def pegar_idade
  puts "Quantos anos você tem?"
  informar_idade = gets.chomp.to_i
end

def imprimir_dados(nome,idade)
  puts "\n" + "seus dados foram armazenados".upcase
  puts nome.upcase + " você tem " + idade.to_s + " anos de idade." + " teste concluído.".upcase
end

def verificar_idade(nome,idade)
    maior = idade.to_i >= 18
    if maior
       puts "\n" + nome.upcase + " gostaria de participar do jogo de matemática? (sim/nao)"
       confirma = gets.chomp
       if confirma == "nao"
         puts "\n" + "Ok " + nome.upcase + " , até a próxima oportunidade..." 
         return true
       else
         puts "\n" + nome.upcase + " vamos testar seu conhecimento de matemática, começaremos com algo simples"
         confirma
       end
   else
       puts "\n" + nome.upcase + " que pena você não tem idade para participar do jogo..."
       return true   
   end
end

def teste_de_matematica
  puts "Qual o resultado da equação x = 9 +8"
  soma = gets.chomp.to_i
end

def verificar_se_acertou(nome,acertou,tentativa,limite)
    if acertou==17
       puts "Você acertou!!!"
       return true
    else
        if tentativa == limite
          puts "\n" + nome.upcase + " você precisa estudar mais e tentar novamente."
          return false
        end
       resta = limite-tentativa
       puts "Você ainda tem " + resta.to_s + " tentativas"
    end
end

nome = pegar_nome
idade = pegar_idade
imprimir_dados(nome,idade)
aceita = verificar_idade(nome,idade)
if aceita == "sim"
   if idade >= 18
      limite = 3
      for tentativa in 1..limite.to_i
         acertou = teste_de_matematica
           if verificar_se_acertou(nome,acertou,tentativa,limite)
             break
           end
       end
    end       
end

A minha questão é: Qual das duas versões é a mais correta, ou que segue as Boas Práticas?

1 resposta
solução!

Fala Eduardo tudo certo ?

Que bom que você está progredindo com o curso =)

Uma dica que eu dou agora é não se preocupar tanto com as boas práticas e sim focar em entender a lógica mesmo, se funcionou está ok !!

Você pode mais tarde quando já tiver progredido mais no curso, tentar refatorar o código novamente o que acha ?

Nos decorrer dos outros cursos de Ruby vamos aprendendo outras técnicas/práticas que vão nos ajudar a melhorar nosso cógido como por exemplo separar o código em arquivos diferentes de acordo com sua responsabilidade, entre outras coisas.