Percursos
/
Ruby
Ruby
/
Exercícios
/
Calculadora simples
Calculadora simples

Calculadora simples

Exercício de aprendizagem

Introdução

Em Ruby, tal como em muitas linguagens, as exceções são uma forma de lidar com acontecimentos inesperados. Um tratamento adequado das exceções é importante para evitar que o teu programa vá abaixo.

Quando é lançada uma exceção, seja porque a lançamos explicitamente, seja porque o intérprete de Ruby a lança, o programa desvia-se do funcionamento normal e acaba por terminar 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)

Se quisermos travar este processo de encerramento, precisamos de reagir à exceção. A isto chama-se fazer rescue de uma exceção:

begin
  # ...any code that raises an exception
rescue
  puts 'Got an exception'
end

Este programa não vai abaixo e imprime «Got an exception». Em vez de terminar, o Ruby executa o código do bloco rescue, que imprime uma mensagem.

Tal como tudo em Ruby, as exceções também são objetos e normalmente contêm dados sobre a exceção. É assim que podemos 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 as tuas 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 incorporadas no 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 vais construir o tratamento de erros de uma calculadora simples.

O objetivo é teres uma calculadora funcional que devolve 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. Trata o código que pode lançar erros dentro do método calculate

O método principal a implementar nesta tarefa será o método de classe SimpleCalculator.calculate(). Recebe três argumentos. Os dois primeiros argumentos são números sobre os quais vai ser realizada uma operação. 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. Trata operações ilegais

Atualiza o método SimpleCalculator.calculate() para lançar uma exceção UnsupportedOperation quando o símbolo da operação é desconhecido.

SimpleCalculator.calculate(1, 2, '-')
# => Raises an UnsupportedOperation
Note

Neste exercício, espera-se que definas a exceção UnsupportedOperation para um âmbito específico.

3. Trata argumentos inválidos

Atualiza o método SimpleCalculator.calculate() para lançar uma exceção ArgumentError quando os tipos dos argumentos são inválidos.

SimpleCalculator.calculate(1, '2', '*')
# => Raises an ArgumentError

4. Trata exceções DivideByZero

Atualiza o SimpleCalculator.calculate() para tratar exceções ZeroDivisionError. O código de tratamento deve devolver 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 A ligação abre numa nova janela ou separador
Ruby Exercism

Estás pronto para começar Calculadora simples?

Inscreve-te no Exercism para aprenderes e dominares Ruby com 21 conceitos121 exercícios, e mentoria humana real, tudo grátis.