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")
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"
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 :
+
*
/
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
Dans cet exercice, on attend de toi que tu définisses l'exception UnsupportedOperation pour une portée spécifique.
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
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."
Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.