Διαδρομές
/
JavaScript
JavaScript
/
Ασκήσεις
/
Αισθητήρες Εργοστασίου
Αισθητήρες Εργοστασίου

Αισθητήρες Εργοστασίου

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

Εισαγωγή

Σφάλματα

Τα σφάλματα είναι χρήσιμα για να αναφέρεις πότε κάτι πάει λάθος ή είναι απρόσμενο σε ένα πρόγραμμα ή σε ένα κομμάτι κώδικα.

Είναι αντικείμενα JavaScript.

Η κύρια ιδιότητα αυτού του αντικειμένου είναι το message:

const error = new Error('Oops, something went wrong');

console.log(error.message);
// => "Oops, something went wrong"

Χρησιμοποιώντας τη σύνταξη throw, μπορείς να πετάξεις ένα σφάλμα.

throw new Error('Oops');

Όταν πεταχτεί ένα σφάλμα, η τρέχουσα εκτέλεση σταματάει και συνεχίζεται στο πρώτο μπλοκ catch της στοίβας κλήσεων.

try {
  throw new Error('Oops');
} catch (error) {
  console.log(error.message);
  // => "Oops"
}

Κληρονομικότητα

Η κληρονομικότητα είναι ένας τρόπος να δημιουργείς σχέσεις γονέα-παιδιού ανάμεσα σε κλάσεις. Η θυγατρική κλάση (που μερικές φορές αναφέρεται ως υποκλάση) έχει πρόσβαση στη συμπεριφορά και στα δεδομένα που ορίζει η γονική κλάση (που μερικές φορές αναφέρεται ως υπερκλάση).

class Pet {
  constructor(name) {
    this.name = name;
  }

  introduce() {
    console.log(`This is my pet, ${this.name}.`);
  }
}

class Dog extends Pet {}

const dog = new Dog('Otis');
dog.introduce();
// => This is my pet, Otis.

Η λέξη-κλειδί extends στη δήλωση της θυγατρικής κλάσης δημιουργεί μια σχέση με τη γονική κλάση μέσω της αλυσίδας πρωτοτύπων.

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

const dog = new Dog('Otis');

Dog.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(Dog.prototype); // => true

Pet.prototype.hasOwnProperty('introduce'); // => true
Dog.prototype.hasOwnProperty('introduce'); // => false
dog.hasOwnProperty('introduce'); // => false

Όπως με κάθε κλάση στη JavaScript, οι υποκλάσεις μπορούν να κληρονομήσουν από το Error για να δημιουργήσουν προσαρμοσμένα σφάλματα χρησιμοποιώντας τη λέξη-κλειδί extends. Η σύνταξη instanceof ελέγχει αν το σφάλμα που πιάστηκε είναι στιγμιότυπο μιας συγκεκριμένης υποκλάσης του Error.

class CustomError extends Error {}

try {
  // ... Code that may throw an error
} catch (error) {
  if (error instanceof CustomError) {
    console.log('The error thrown is an instance of the CustomError');
  }
}

Οδηγίες

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

1. Παρακολούθησε το επίπεδο υγρασίας του δωματίου

Η πρώτη σου αποστολή είναι να γράψεις ένα λογισμικό για να παρακολουθείς το επίπεδο υγρασίας του δωματίου παραγωγής. Υπάρχει ήδη ένας αισθητήρας συνδεδεμένος με το λογισμικό της εταιρείας που επιστρέφει περιοδικά το ποσοστό υγρασίας του δωματίου.

Πρέπει να υλοποιήσεις μια συνάρτηση στο λογισμικό που θα πετάει ένα σφάλμα αν το ποσοστό υγρασίας είναι πολύ υψηλό. Η συνάρτηση θα πρέπει να ονομάζεται checkHumidityLevel και να παίρνει ως παράμετρο το ποσοστό υγρασίας.

Θα πρέπει να πετάξεις ένα σφάλμα (το μήνυμα δεν έχει σημασία) αν το ποσοστό ξεπερνά το 70%.

checkHumidityLevel(60);
// => undefined
checkHumidityLevel(100);
// Throws an error

2. Ανίχνευσε την υπερθέρμανση

Η Elena είναι πολύ ευχαριστημένη με την πρώτη σου εργασία και σου ζητάει να ασχοληθείς με την παρακολούθηση της θερμοκρασίας των μηχανών. Καθώς κουβεντιάζεις με έναν τεχνικό, τον Greg, μαθαίνεις ότι αν η θερμοκρασία μιας μηχανής ξεπερνά τους 500°C, οι τεχνικοί αρχίζουν να ανησυχούν για υπερθέρμανση.

Η μηχανή είναι εξοπλισμένη με έναν αισθητήρα που μετρά την εσωτερική της θερμοκρασία. Θα πρέπει να ξέρεις ότι ο αισθητήρας είναι πολύ ευαίσθητος και συχνά χαλάει. Σε αυτή την περίπτωση, οι τεχνικοί θα χρειαστεί να τον αλλάξουν.

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

  • Αν ο αισθητήρας είναι χαλασμένος, η θερμοκρασία θα είναι null. Σε αυτή την περίπτωση, θα πρέπει να πετάξεις ένα ArgumentError.
  • Όταν όλα λειτουργούν, αν η θερμοκρασία ξεπερνά τους 500°C, θα πρέπει να πετάξεις ένα OverheatingError. Θα δημιουργήσεις στιγμιότυπο αυτής της κλάσης σφάλματος με όρισμα θερμοκρασίας. Βεβαιώσου ότι το OverheatingError που πετάς έχει συνδεδεμένη μια ιδιότητα temperature.
reportOverheating(null);
// Throws an ArgumentError
reportOverheating(800);
// Throws an OverheatingError

3. Παρακολούθησε τη μηχανή

Τώρα που η μηχανή σου μπορεί να ανιχνεύει σφάλματα, θα υλοποιήσεις μια συνάρτηση που αντιδρά σε αυτά τα σφάλματα με διαφορετικούς τρόπους:

  • Αν ο αισθητήρας είναι χαλασμένος, θα πρέπει να ειδοποιήσεις έναν τεχνικό.
  • Αν η θερμοκρασία είναι πολύ υψηλή, είτε θα σβήσεις τη μηχανή αν η θερμοκρασία ξεπερνά τους 600°C, είτε θα ανάψεις μια προειδοποιητική λυχνία αν είναι χαμηλότερη από αυτό το όριο.
  • Αν συμβεί κάποιο άλλο σφάλμα, θα το πετάξεις ξανά.

Υλοποίησε μια συνάρτηση monitorTheMachine που παίρνει ως όρισμα το actions.

Το actions είναι ένα αντικείμενο που έχει 4 ιδιότητες:

ιδιότητα περιγραφή
check μια συνάρτηση. Ελέγχει τη θερμοκρασία της μηχανής. Μπορεί να πετάξει διάφορα σφάλματα.
alertDeadSensor μια συνάρτηση. Ειδοποιεί έναν τεχνικό ότι ο αισθητήρας θερμοκρασίας είναι χαλασμένος.
alertOverheating μια συνάρτηση. Θα ανάψει μια προειδοποιητική λυχνία στη μηχανή.
shutdown μια συνάρτηση. Θα σβήσει τη μηχανή.

Η συνάρτηση monitorTheMachine(actions) θα πρέπει να καλεί εσωτερικά το check(). Αν αυτό περάσει, η συνάρτηση δεν θα πρέπει να επιστρέφει τίποτα. Αν αυτό πετάξει ένα σφάλμα (throw), αναμένεται διαφορετική συμπεριφορά:

εξαίρεση αναμενόμενη συμπεριφορά
ArgumentError κάλεσε τη συνάρτηση alertDeadSensor.
OverheatingError εκτέλεσε το πρωτόκολλο υπερθέρμανσης.
(οτιδήποτε άλλο) πέταξε ξανά το σφάλμα

Πρωτόκολλο υπερθέρμανσης Αν η θερμοκρασία είναι μικρότερη από 600 °C, άναψε την προειδοποιητική λυχνία καλώντας τη συνάρτηση alertOverheating. Αν η θερμοκρασία ξεπερνά τους 600 °C, η κατάσταση είναι κρίσιμη, οπότε κάλεσε τη συνάρτηση shutdown.

monitorTheMachine({
  check,
  alertDeadSensor,
  alertOverheating,
  shutdown,
});
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
JavaScript Exercism

Έτοιμος να ξεκινήσεις την άσκηση Αισθητήρες Εργοστασίου;

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