Created
June 16, 2015 12:52
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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