Desenvolvi um código simples para tentar entender melhor o processo de extração de função, abaixo está o código inicial:
#dado_publico3.rb
system "cls"
puts "Qual o seu nome?"
nome = gets.chomp
puts nome.upcase + " quantos anos você tem?"
idade = gets.chomp
puts "\n" + "seu nome foi armazenado".upcase
puts nome.upcase + " teste concluído."
if idade.to_i<18
puts nome.upcase + " que pena você não tem idade para participar do jogo..."
end
if idade.to_i >= 18
puts "\n" + nome.upcase + " gostaria de participar do jogo de matemática? (sim/nao)"
confirma = gets.chomp
if confirma.downcase =="sim"
puts "\n" + nome.upcase + " vamos testar seu conhecimento de matemática, começaremos com algo simples"
limite = 3
for tentativa in 1..limite.to_i
puts "Qual o resultado da equação x = 9 +8"
resultado = gets.chomp
if resultado.to_i == 17
puts "Você acertou!!!"
break
else
if tentativa == limite
puts "\n" + nome.upcase + " você precisa estudar mais e tentar novamente."
break
end
resta = limite-tentativa
puts "Você ainda tem " + resta.to_s + " tentativas"
end
end
else
puts "\n" + "Ok " + nome.upcase + " , até a próxima oportunidade..."
end
end
a execução deste código está ilustrado abaixo:
Qual o seu nome?
ana
ANA quantos anos você tem?
21
SEU NOME FOI ARMAZENADO
ANA teste concluído.
ANA gostaria de participar do jogo de matemática? (sim/nao)
sim
ANA vamos testar seu conhecimento de matemática, começaremos com algo simples
Qual o resultado da equação x = 9 +8
12
Você ainda tem 2 tentativas
Qual o resultado da equação x = 9 +8
13
Você ainda tem 1 tentativas
Qual o resultado da equação x = 9 +8
17
Você acertou!!!
ou
C:\ruby21\programas>ruby dado_privado3c2.rb
Qual o seu nome?
ana
Quantos anos você tem?
12
SEUS DADOS FORAM ARMAZENADOS
ANA você tem 12 anos de idade. TESTE CONCLUíDO.
ANA que pena você não tem idade para participar do jogo...
ou
C:\ruby21\programas>ruby dado_privado3c2.rb
Qual o seu nome?
ana
Quantos anos você tem?
21
SEUS DADOS FORAM ARMAZENADOS
ANA você tem 21 anos de idade. TESTE CONCLUíDO.
ANA gostaria de participar do jogo de matemática? (sim/nao)
nao
Ok ANA , até a próxima oportunidade...
C:\ruby21\programas>
O novo código tentando dividir o código original ficou da seguinte forma:
def pegar_nome
puts "Qual o seu nome?"
dado1 = gets.chomp
dado1
end
def pegar_idade
puts "Quantos anos você tem?"
dado2 = gets.chomp
dado2
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 teste_de_matematica
puts "Qual o resultado da equação x = 9 +8"
soma = gets.chomp
soma
end
def menor_idade(nome,idade)
menor = idade.to_i<18
if menor
puts "\n" + nome.upcase + " que pena você não tem idade para participar do jogo..."
return true
end
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.to_i
imprimir_dados(nome,idade)
menor_idade(nome,idade)
if idade.to_i >= 18
puts "\n" + nome.upcase + " gostaria de participar do jogo de matemática? (sim/nao)"
confirma = gets.chomp
if confirma.downcase =="sim"
puts "\n" + nome.upcase + " vamos testar seu conhecimento de matemática, começaremos com algo simples"
limite = 3
for tentativa in 1..limite.to_i
acertou = teste_de_matematica.to_i
break if verificar_se_acertou(nome,acertou,tentativa,limite)
end
else
puts "\n" + "Ok " + nome.upcase + " , até a próxima oportunidade..."
end
end
Este novo código comporta-se como o original, as minhas questões são: 1 - como posso dividir em funções os comandos abaixo do 'menor_idade(nome,idade)', estou a alguns dias tentando solucionar este problema...e2 - ficou mais fácil compreender o que este novo código faz do que o anterior? grato por sua atençãoattEduardo