Διαδρομές
/
Ruby
Ruby
/
Ασκήσεις
/
Απλή αριθμομηχανή
Απλή αριθμομηχανή

Απλή αριθμομηχανή

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

Εισαγωγή

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

Όταν μια εξαίρεση πετιέται, είτε επειδή την πετάς ρητά είτε επειδή την πετάει ο διερμηνευτής της Ruby, το πρόγραμμα εκτρέπεται από την κανονική του λειτουργία και τελικά τερματίζεται με ένα μήνυμα σφάλματος:

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)

Αν θέλεις να σταματήσεις αυτή τη διαδικασία τερματισμού, πρέπει να αντιδράσεις στην εξαίρεση. Αυτό ονομάζεται "διάσωση" μιας εξαίρεσης:

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

Αυτό το πρόγραμμα δεν θα καταρρεύσει και θα εμφανίσει "Got an exception". Αντί να τερματιστεί, η Ruby εκτελεί τον κώδικα στο μπλοκ rescue, το οποίο τυπώνει ένα μήνυμα.

Όπως τα πάντα στη Ruby, έτσι και οι εξαιρέσεις είναι αντικείμενα και συνήθως περιέχουν δεδομένα για την εξαίρεση. Έτσι μπορείς να πάρεις το αντικείμενο της εξαίρεσης:

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

Στη Ruby είναι επίσης δυνατό να πετάξεις τις δικές σου εξαιρέσεις. Για παράδειγμα:

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

Η προηγούμενη εξαίρεση είναι μία από τις ενσωματωμένες εξαιρέσεις της Ruby, αλλά είναι επίσης δυνατό να ορίσεις προσαρμοσμένες εξαιρέσεις και να τις πετάξεις:

class CustomError < StandardError
end

raise CustomError.new("Something went wrong")

Οδηγίες

Σε αυτή την άσκηση θα φτιάξεις τη διαχείριση σφαλμάτων για μια απλή αριθμομηχανή.

Ο στόχος είναι να έχεις μια αριθμομηχανή που λειτουργεί και επιστρέφει μια συμβολοσειρά με το εξής μοτίβο: 16 + 51 = 67, όταν της δίνεις τα ορίσματα 16, 51 και +.

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

1. Χειρίσου τον κώδικα που μπορεί να πετάει σφάλματα μέσα στη μέθοδο calculate

Η κύρια μέθοδος που θα υλοποιήσεις σε αυτή την εργασία θα είναι η μέθοδος κλάσης SimpleCalculator.calculate(). Δέχεται τρία ορίσματα. Τα δύο πρώτα ορίσματα είναι αριθμοί πάνω στους οποίους θα γίνει μια πράξη. Το τρίτο όρισμα είναι τύπου συμβολοσειράς και για αυτή την άσκηση χρειάζεται να υλοποιήσεις τις εξής πράξεις:

  • πρόσθεση χρησιμοποιώντας τη συμβολοσειρά +
  • πολλαπλασιασμό χρησιμοποιώντας τη συμβολοσειρά *
  • διαίρεση χρησιμοποιώντας τη συμβολοσειρά /

2. Χειρίσου τις μη έγκυρες πράξεις

Ενημέρωσε τη μέθοδο SimpleCalculator.calculate() ώστε να πετάει μια εξαίρεση UnsupportedOperation για άγνωστα σύμβολα πράξεων.

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

Σε αυτή την άσκηση, αναμένεται να ορίσεις την εξαίρεση UnsupportedOperation για ένα συγκεκριμένο πεδίο εφαρμογής.

3. Χειρίσου τα μη έγκυρα ορίσματα

Ενημέρωσε τη μέθοδο SimpleCalculator.calculate() ώστε να πετάει μια εξαίρεση ArgumentError για μη έγκυρους τύπους ορισμάτων.

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

4. Χειρίσου τις εξαιρέσεις DivideByZero

Ενημέρωσε τη μέθοδο SimpleCalculator.calculate() ώστε να χειρίζεται τις εξαιρέσεις ZeroDivisionError. Ο κώδικας διαχείρισης θα πρέπει να επιστρέφει τη συμβολοσειρά με περιεχόμενο Division by zero is not allowed.. Καμία άλλη εξαίρεση δεν θα πρέπει να χειρίζεται η μέθοδος SimpleCalculator.calculate().

SimpleCalculator.calculate(512, 0, "/")
# => returns "Division by zero is not allowed."
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ruby Exercism

Έτοιμος να ξεκινήσεις την άσκηση Απλή αριθμομηχανή;

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