Skip to content

Instantly share code, notes, and snippets.

@edygar
Created June 16, 2015 12:52
Show Gist options
  • Save edygar/c1d637f354d6b7806b38 to your computer and use it in GitHub Desktop.
Save edygar/c1d637f354d6b7806b38 to your computer and use it in GitHub Desktop.
Gist de explicação como ler apenas números em Ruby para ajudar um amigo ;D
# Para números inteiros, é bem mais fácil
puts "Input a number: "
# a gente lê para o input o que o usuário digitou e
# testa de convertando para inteiro e depois para string
# o valor continua sendo o mesmo, se sim, é inteiro:
# Exemplos:
# "asdasda".to_i => 0.to_s => "0" != "asdasda"
# "0".to_i => 0.to_s => "0" == "0"
# "123123".to_i => 123123.to_s => "123123" == "123123"
while(input = gets.chomp and input.to_i.to_s != input)
puts "Invalid Input '" + input + "', please, try again"
end
puts "Well done, " + input + " is a number"
# -------------------------------------
# Já números fluantes tem coisa que você não aprendeu ainda
# mas vou tentar te explicar superficialmente
puts "Input a number: "
# a gente lê a entrada para o input
input = gets.chomp
# e Float(input) tenta converter input para Float, igual ao to_f
# mas diferente do to_f, se Float() receber uma string que não pode
# ser convertida para número flutuante (float), ele gera uma EXCEÇÃO
# que vai fazer seu programa fechar (experimente remover o rescue false)
begin
isValid = !!Float(input)
rescue
isValid = false
end
# Para isso o rescue serve. A gente fala pro sistema que se acontecer
# alguma exceção, ao invés de fechar o programa, o bloco do rescue vai
# ser chamado
# As exceções são erros que o sistema não sabe tratar (por sistema entenda
# a CPU / Processador / Sistema Operacional). O sistema em si não sabe o
# que o seu programa está fazendo, ele só faz o que você pede. Quando
# alguma MERDA acontece, ele não sabe o que fazer e encerra a sua aplicação
# Usando o rescue você fala pra ele: se der merda, me chama que eu resolvo
# Tem mais coisas que se pode fazer com as exceções, mas por hora, vou limitar
# a isso, é o que a gente precisa pro nosso programa funcionar afinal de contas
# Enquanto não for válido, a gente roda a mesma operação, só que avisando que
# é inválido
while(!isValid)
puts "Invalid Input '" + input + "', please, try again"
input = gets.chomp
# Aqui em baixo eu coloquei no formato "inline" do ruby, não estranhe, é só
# que fica com a elegância inerente ao ruby
isValid = !!Float(input) rescue false
end
puts "Well done, " + input + " is a number"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment