Trilhas
/
Ruby
Ruby
/
Exercícios
/
Calculadora simples
Calculadora simples

Calculadora simples

Exercício de aprendizagem

Introdução

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")

Instruções

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"

1. Trate o código que pode gerar erros dentro do método 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:

  • adição usando a string +
  • multiplicação usando a string *
  • divisão usando a string /

2. Trate operações ilegais

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
Note

Neste exercício, espera-se que você defina a exceção UnsupportedOperation para um escopo específico.

3. Trate argumentos inválidos

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

4. Trate exceções DivideByZero

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."
Editar via GitHub O link abre em uma nova janela ou aba
Ruby Exercism

Tudo pronto para começar Calculadora simples?

Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.