As exceções em Ruby, como em muitas linguagens, oferecem uma forma de lidar com eventos inesperados. O tratamento adequado de exceções é importante quando você quer evitar que seu programa quebre.
Quando uma exceção é lançada, seja porque você a lançou explicitamente, seja porque o interpretador Ruby a lançou, o programa desvia da operação normal e, por fim, encerra com uma mensagem de erro:
raise ArgumentError.new("Something went wrong!")
=> Traceback (most recent call last):
.
.
ArgumentError (Something went wrong!)
1/0
=> Traceback (most recent call last):
.
.
ZeroDivisionError (divided by 0)
Caso você queira impedir esse encerramento, precisa reagir à exceção. Isso se chama "resgatar" uma exceção:
begin
# ...any code that raises an exception
rescue
puts 'Got an exception'
end
Este programa não vai quebrar e vai imprimir "Got an exception". Em vez de encerrar, o Ruby executa o código no bloco rescue, que imprime uma mensagem.
Como tudo em Ruby, as exceções também são objetos e normalmente carregam dados sobre a exceção. É assim que você pode obter o objeto da exceção:
begin
# ...any code that raises an exception
rescue => e
puts "Exception class: #{ e.class.name }"
puts "Exception Message:#{e.message}"
end
Em Ruby, também é possível lançar suas próprias exceções. Por exemplo:
begin
raise ArgumentError.new("Invalid argument")
rescue ArgumentError => e
puts e.message
end
A exceção anterior é uma das exceções nativas do Ruby, mas também é possível definir exceções personalizadas e lançá-las:
class CustomError < StandardError
end
raise CustomError.new("Something went wrong")
Neste exercício, você vai construir o tratamento de erros de uma calculadora simples.
O objetivo é ter uma calculadora funcionando que retorna uma string com o seguinte padrão: 16 + 51 = 67, quando recebe os argumentos 16, 51 e +.
SimpleCalculator.calculate(16, 51, "+")
# => "16 + 51 = 67"
SimpleCalculator.calculate(32, 6, "*")
# => "32 * 6 = 192"
SimpleCalculator.calculate(512, 4, "/")
# => "512 / 4 = 128"
calculate
O principal método a ser implementado nesta tarefa será o método de classe SimpleCalculator.calculate().
Ele recebe três argumentos.
Os dois primeiros argumentos são números sobre os quais uma operação será realizada.
O terceiro argumento é do tipo string e, para este exercício, é necessário implementar as seguintes operações:
+
*
/
Atualize o método SimpleCalculator.calculate() para lançar uma exceção UnsupportedOperation para símbolos de operação desconhecidos.
SimpleCalculator.calculate(1, 2, '-')
# => Raises an UnsupportedOperation
Neste exercício, espera-se que você defina a exceção UnsupportedOperation para um escopo específico.
Atualize o método SimpleCalculator.calculate() para lançar uma exceção ArgumentError para tipos de argumento inválidos.
SimpleCalculator.calculate(1, '2', '*')
# => Raises an ArgumentError
Atualize o método SimpleCalculator.calculate() para tratar exceções ZeroDivisionError.
O código de tratamento deve retornar a string com o conteúdo Division by zero is not allowed..
Qualquer outra exceção não deve ser tratada pelo método SimpleCalculator.calculate().
SimpleCalculator.calculate(512, 0, "/")
# => returns "Division by zero is not allowed."
Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.