Parcours
/
C#
C#
/
Exercices
/
Instruments du Texas
Instruments du Texas

Instruments du Texas

Exercice d'apprentissage

Introduction

Filtrage des exceptions

when est le mot-clé qui permet de filtrer les exceptions. Il se place après l'instruction catch et peut prendre une expression booléenne contenant toutes les valeurs qui sont dans la portée à ce moment-là. Si l'expression est évaluée à vrai, le bloc associé à cette instruction catch est exécuté, sinon l'instruction catch suivante, s'il y en a une, est vérifiée.

try
{
    // do stuff
}
catch (Exception ex) when (ex.Message != "")
{
    // output the message when it is not empty
}
catch (Exception ex)
{
    // show stack trace or something.
}

Exceptions définies par l'utilisateur

Une exception définie par l'utilisateur est toute classe définie dans ton code qui dérive de System.Exception. Elle est soumise à toutes les règles de l'héritage de classe, mais en plus le compilateur et l'environnement d'exécution du langage traitent ces classes d'une manière particulière, ce qui permet de lever et d'intercepter leurs instances en dehors du flux de contrôle normal, comme expliqué dans l'exercice exceptions.

Les exceptions définies par l'utilisateur servent souvent à transporter des informations supplémentaires, comme un message et d'autres données pertinentes, à mettre à la disposition des routines qui les interceptent.

Instructions

Pendant que tu travailles chez Instruments of Texas, ta mission est de travailler sur une calculatrice expérimentale écrite en C#. Tu construis un banc de test pour vérifier un certain nombre de fonctions de la calculatrice, en commençant par la multiplication. Tu verras qu'une attention particulière est portée au cas où les deux opérandes de la multiplication sont négatifs.

La classe Calculator t'est fournie et ne doit pas être modifiée.

1. Complète la définition de l'exception définie par l'utilisateur CalculationException

Complète la définition du constructeur de CalculationException, qui devra stocker (encapsuler) toute exception levée par la calculatrice ainsi que les opérandes en cours de traitement au moment où l'exception est levée.

2. Gère les cas de dépassement de capacité dans la calculatrice et fournis des informations plus riches à l'appelant

Implémente la méthode CalculatorTestHarness.Multiply(), qui doit appeler la méthode Calculator.Multiply() de l'instance de Calculator passée au constructeur, en lui passant les valeurs entières x et y. Si un dépassement de capacité se produit dans la méthode Calculator.Multiply(), celle-ci lève une OverflowException. Cette exception doit être interceptée dans la méthode CalculatorTestHarness.Multiply() et encapsulée dans une CalculationException, et les valeurs x et y transmises doivent être stockées comme opérandes de l'exception. L'objet CalculationException nouvellement créé doit être levé. Tu peux ignorer la valeur renvoyée par la méthode Calculator.Multiply() si celle-ci réussit.

var cth = new CalculatorTestHarness(new Calculator());
cth.Multiply(Int32.MaxValue, Int32.MaxValue);
// => throws an instance of CalculationException

var cth2 = new CalculatorTestHarness(new Calculator());
cth2.Multiply(3, 2);
// => silently exits

3. Teste l'opération de multiplication pour des entrées valides

Implémente la méthode CalculatorTestHarness.TestMultiplication(), qui prend deux entiers et appelle la méthode CalculatorTestHarness.Multiply(). C'est "Multiply succeeded" qui est renvoyé.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"

4. Teste l'opération de multiplication pour des entrées négatives

Modifie la méthode CalculatorTestHarness.TestMultiplication() pour que "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" soit renvoyé si les deux arguments entiers sont négatifs (inférieurs à zéro).

L'espace réservé <INNER_EXCEPTION_MESSAGE> doit être remplacé par le message de l'exception interne de la CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message

5. Teste l'opération de multiplication pour des entrées positives

Modifie la méthode CalculatorTestHarness.TestMultiplication() pour que "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" soit renvoyé si au moins un des arguments entiers n'est pas négatif.

L'espace réservé <INNER_EXCEPTION_MESSAGE> doit être remplacé par le message de l'exception interne de la CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C# Exercism

Prêt à commencer Instruments du Texas ?

Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.