Parcours
/
Ruby
Ruby
/
Exercices
/
Calculatrice simple
Calculatrice simple

Calculatrice simple

Exercice d'apprentissage

Introduction

Les exceptions en Ruby, comme dans beaucoup de langages, permettent de gérer des événements inattendus. Bien gérer les exceptions est important pour éviter que ton programme ne plante.

Lorsqu'une exception est levée, que ce soit explicitement ou par l'interpréteur Ruby, le programme interrompt son fonctionnement normal et finit par s'arrêter avec un message d'erreur :

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)

Si on veut empêcher ce processus d'arrêt, il faut réagir à l'exception. C'est ce qu'on appelle «\u00A0intercepter\u00A0» une exception :

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

Ce programme ne plantera pas et affichera «\u00A0Got an exception\u00A0». Au lieu de s'arrêter, Ruby exécute le code du bloc rescue, qui affiche un message.

Comme tout en Ruby, les exceptions sont aussi des objets et contiennent généralement des données sur l'exception. Voici comment on peut récupérer l'objet exception :

begin
  # ...any code that raises an exception
rescue => e
  puts "Exception class: #{ e.class.name }"
  puts "Exception Message:#{e.message}"
end

Il est aussi possible de lever tes propres exceptions en Ruby. Par exemple :

begin
  raise ArgumentError.new("Invalid argument")
rescue ArgumentError => e
  puts e.message
end

L'exception précédente est l'une des exceptions intégrées de Ruby, mais il est aussi possible de définir des exceptions personnalisées et de les lever :

class CustomError < StandardError
end

raise CustomError.new("Something went wrong")

Instructions

Dans cet exercice, tu vas mettre en place la gestion des erreurs d'une calculatrice simple.

L'objectif est d'obtenir une calculatrice fonctionnelle qui renvoie une chaîne de caractères selon le modèle suivant : 16 + 51 = 67, lorsqu'on lui fournit les arguments 16, 51 et +.

SimpleCalculator.calculate(16, 51, "+")
# => "16 + 51 = 67"
SimpleCalculator.calculate(32, 6, "*")
# => "32 * 6 = 192"
SimpleCalculator.calculate(512, 4, "/")
# => "512 / 4 = 128"

1. Gère le code qui peut lever des erreurs dans la méthode calculate

La méthode principale à implémenter dans cette tâche sera la méthode de classe SimpleCalculator.calculate(). Elle prend trois arguments. Les deux premiers arguments sont les nombres sur lesquels une opération va être effectuée. Le troisième argument est de type string et, pour cet exercice, il est nécessaire d'implémenter les opérations suivantes :

  • l'addition à l'aide du string +
  • la multiplication à l'aide du string *
  • la division à l'aide du string /

2. Gère les opérations illégales

Modifie la méthode SimpleCalculator.calculate() pour lever une exception UnsupportedOperation lorsque le symbole de l'opération est inconnu.

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

Dans cet exercice, on attend de toi que tu définisses l'exception UnsupportedOperation pour une portée spécifique.

3. Gère les arguments invalides

Modifie la méthode SimpleCalculator.calculate() pour lever une exception ArgumentError lorsque les types des arguments sont invalides.

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

4. Gère les exceptions de division par zéro

Modifie la méthode SimpleCalculator.calculate() pour gérer les exceptions ZeroDivisionError. Le code de gestion doit renvoyer le string dont le contenu est Division by zero is not allowed.. Toute autre exception ne doit pas être gérée par la méthode SimpleCalculator.calculate().

SimpleCalculator.calculate(512, 0, "/")
# => returns "Division by zero is not allowed."
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Ruby Exercism

Prêt à commencer Calculatrice simple ?

Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.