Διαδρομές
/
C#
C#
/
Ασκήσεις
/
Όργανα του Τέξας
Όργανα του Τέξας

Όργανα του Τέξας

Άσκηση εκμάθησης

Εισαγωγή

Φιλτράρισμα εξαιρέσεων

Το when είναι η λέξη-κλειδί για το φιλτράρισμα των εξαιρέσεων. Τοποθετείται μετά την εντολή catch και μπορεί να πάρει μια έκφραση Boolean (λογική τιμή) που περιέχει οποιεσδήποτε τιμές βρίσκονται στο πεδίο εμβέλειας εκείνη τη στιγμή. Αν η έκφραση είναι αληθής, τότε εκτελείται το μπλοκ που σχετίζεται με αυτή την εντολή catch, αλλιώς ελέγχεται η επόμενη εντολή catch, αν υπάρχει.

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.
}

Εξαιρέσεις οριζόμενες από τον χρήστη

Μια εξαίρεση οριζόμενη από τον χρήστη είναι οποιαδήποτε κλάση ορίζεις στον κώδικά σου και η οποία προέρχεται από το System.Exception. Υπόκειται σε όλους τους κανόνες της κληρονομικότητας κλάσεων, αλλά επιπλέον ο μεταγλωττιστής και ο χρόνος εκτέλεσης της γλώσσας αντιμετωπίζουν αυτές τις κλάσεις με ειδικό τρόπο, επιτρέποντας τη ρίψη και τη σύλληψη των στιγμιοτύπων τους έξω από την κανονική ροή ελέγχου, όπως συζητήθηκε στην άσκηση exceptions.

Οι εξαιρέσεις οριζόμενες από τον χρήστη χρησιμοποιούνται συχνά για να μεταφέρουν επιπλέον πληροφορίες, όπως ένα μήνυμα και άλλα σχετικά δεδομένα, ώστε αυτές να γίνουν διαθέσιμες στις ρουτίνες που συλλαμβάνουν την εξαίρεση.

Οδηγίες

Ενώ εργάζεσαι στην Instruments of Texas, σου έχει ανατεθεί να δουλέψεις πάνω σε μια πειραματική αριθμομηχανή γραμμένη σε C#. Φτιάχνεις ένα πλαίσιο δοκιμών για να επαληθεύσεις μια σειρά από λειτουργίες της αριθμομηχανής, ξεκινώντας από τον πολλαπλασιασμό. Θα δεις ότι υπάρχει ιδιαίτερη ανησυχία όταν οι δύο τελεστέοι του πολλαπλασιασμού είναι αρνητικοί.

Η κλάση Calculator σου έχει δοθεί και δεν πρέπει να τροποποιηθεί.

1. Συμπλήρωσε τον ορισμό της εξαίρεσης CalculationException που ορίζει ο χρήστης

Συμπλήρωσε τον ορισμό του κατασκευαστή της CalculationException, ο οποίος θα πρέπει να αποθηκεύει (να περιτυλίγει) κάθε εξαίρεση που πετάει η αριθμομηχανή, καθώς και τους τελεστέους που επεξεργάζονται τη στιγμή που πετιέται η εξαίρεση.

2. Χειρίσου τις συνθήκες υπερχείλισης στην αριθμομηχανή και δώσε περισσότερες πληροφορίες σε αυτόν που καλεί

Υλοποίησε τη μέθοδο CalculatorTestHarness.Multiply(), η οποία θα πρέπει να καλεί τη μέθοδο Calculator.Multiply() του στιγμιότυπου Calculator που περνιέται στον κατασκευαστή, περνώντας της τις ακέραιες τιμές x και y. Αν προκύψει υπερχείλιση στη μέθοδο Calculator.Multiply(), αυτή θα πετάξει μια OverflowException. Αυτή η εξαίρεση θα πρέπει να πιαστεί στη μέθοδο CalculatorTestHarness.Multiply() και να περιτυλιχθεί σε μια CalculationException, και οι τιμές x και y που περνιούνται θα πρέπει να αποθηκευτούν ως τελεστέοι της εξαίρεσης. Το νεοδημιουργημένο αντικείμενο CalculationException θα πρέπει να πεταχτεί. Μπορείς να αγνοήσεις την τιμή που επιστρέφει η μέθοδος Calculator.Multiply() αν πετύχει.

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. Δοκίμασε την πράξη του πολλαπλασιασμού για έγκυρες εισόδους

Υλοποίησε τη μέθοδο CalculatorTestHarness.TestMultiplication(), η οποία παίρνει δύο ακέραιους και καλεί τη μέθοδο CalculatorTestHarness.Multiply(). Επιστρέφεται το "Multiply succeeded".

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

4. Δοκίμασε την πράξη του πολλαπλασιασμού για αρνητικές εισόδους

Τροποποίησε τη μέθοδο CalculatorTestHarness.TestMultiplication() ώστε να επιστρέφεται το "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" αν και τα δύο ακέραια ορίσματα είναι αρνητικά (μικρότερα του μηδενός).

Το σύμβολο κράτησης θέσης <INNER_EXCEPTION_MESSAGE> θα πρέπει να αντικατασταθεί με το μήνυμα της εσωτερικής εξαίρεσης της CalculationException.

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

5. Δοκίμασε την πράξη του πολλαπλασιασμού για θετικές εισόδους

Τροποποίησε τη μέθοδο CalculatorTestHarness.TestMultiplication() ώστε να επιστρέφεται το "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" αν τουλάχιστον ένα από τα ακέραια ορίσματα δεν είναι αρνητικό.

Το σύμβολο κράτησης θέσης <INNER_EXCEPTION_MESSAGE> θα πρέπει να αντικατασταθεί με το μήνυμα της εσωτερικής εξαίρεσης της CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
C# Exercism

Έτοιμος να ξεκινήσεις την άσκηση Όργανα του Τέξας;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις C# με 62 έννοιες178 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.