Tracks
/
JavaScript
JavaScript
/
Übungen
/
Fabriksensoren
Fabriksensoren

Fabriksensoren

Lernübung

Einführung

Fehler

Fehler sind nützlich, um zu melden, wenn in einem Programm oder einem Codeabschnitt etwas schiefgeht oder unerwartet passiert.

Es sind JavaScript-Objekte.

Die wichtigste Eigenschaft dieses Objekts ist message:

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

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

Mit der throw-Syntax kannst du einen Error werfen.

throw new Error('Oops');

Wenn ein Fehler geworfen wird, wird die aktuelle Ausführung gestoppt und im ersten catch-Block des Aufrufstapels fortgesetzt.

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

Vererbung

Vererbung ist eine Möglichkeit, Eltern-Kind-Beziehungen zwischen Klassen herzustellen. Die Kindklasse (manchmal auch Unterklasse genannt) hat Zugriff auf das Verhalten und die Daten, die von der Elternklasse (manchmal auch Oberklasse genannt) definiert werden.

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.

Das Schlüsselwort extends in der Deklaration der Kindklasse stellt über die Prototypkette eine Beziehung zur Elternklasse her.

Objekte, die vom Konstruktor der Kindklasse erzeugt werden, haben das Prototyp der Elternklasse in ihrer Prototypkette und erhalten dadurch Zugriff auf alle Methoden und Daten, die von der Elternklasse definiert werden.

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

Wie bei jeder Klasse in JavaScript können Unterklassen mithilfe des Schlüsselworts extends von Error erben, um eigene Fehler zu erstellen. Die instanceof-Syntax prüft, ob der gefangene Fehler eine Instanz einer bestimmten Unterklasse von Error ist.

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');
  }
}

Anleitung

Elena ist die neue Qualitätsmanagerin einer Zeitungsfabrik. Da sie gerade erst im Unternehmen angekommen ist, hat sie beschlossen, einige Prozesse in der Fabrik zu überprüfen, um zu sehen, was verbessert werden könnte. Sie hat herausgefunden, dass Techniker viele Qualitätsprüfungen von Hand durchführen. Sie sieht eine gute Gelegenheit für Automatisierung und bittet dich als freiberuflichen Entwickler, eine Software zu entwickeln, um einige der Maschinen zu überwachen.

1. Überwache die Luftfeuchtigkeit im Raum

Deine erste Mission ist es, eine Software zu schreiben, die die Luftfeuchtigkeit im Produktionsraum überwacht. Es gibt bereits einen Sensor, der an die Software des Unternehmens angeschlossen ist und regelmäßig die Luftfeuchtigkeit des Raums in Prozent zurückgibt.

Du musst eine Funktion in der Software implementieren, die einen Fehler auslöst, wenn die Luftfeuchtigkeit zu hoch ist. Die Funktion soll checkHumidityLevel heißen und die Luftfeuchtigkeit in Prozent als Parameter entgegennehmen.

Du solltest einen Fehler auslösen (die Meldung ist nicht wichtig), wenn der Prozentsatz 70 % überschreitet.

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

2. Überhitzung erkennen

Elena ist sehr zufrieden mit deiner ersten Aufgabe und bittet dich, dich um die Überwachung der Temperatur der Maschinen zu kümmern. Während du mit einem Techniker namens Greg sprichst, erfährst du, dass die Techniker sich wegen Überhitzung Sorgen machen, wenn die Temperatur einer Maschine 500 °C überschreitet.

Die Maschine ist mit einem Sensor ausgestattet, der ihre Innentemperatur misst. Du solltest wissen, dass der Sensor sehr empfindlich ist und oft kaputtgeht. In diesem Fall müssen die Techniker ihn austauschen.

Deine Aufgabe ist es, eine Funktion reportOverheating zu implementieren, die die Temperatur als Parameter entgegennimmt und einen Fehler auslöst, wenn der Sensor defekt ist oder die Maschine zu überhitzen beginnt. Da du später je nach Fehler unterschiedlich reagieren musst, brauchst du einen Mechanismus, um die beiden Fehlerarten zu unterscheiden. Du könntest dich auf die Fehlermeldungen verlassen, aber das würde deinen Code anfällig machen, denn er würde kaputtgehen, wenn die Meldung aktualisiert wird. Um das sauber hinzubekommen, löst du Instanzen verschiedener Fehlerklassen aus.

  • Wenn der Sensor defekt ist, ist die Temperatur null. In diesem Fall solltest du einen ArgumentError auslösen.
  • Wenn alles funktioniert und die Temperatur 500 °C überschreitet, solltest du einen OverheatingError auslösen. Diese Fehlerklasse wird mit einem Temperatur-Argument instanziiert. Stelle sicher, dass der OverheatingError, den du auslöst, eine temperature-Eigenschaft hat.
reportOverheating(null);
// Throws an ArgumentError
reportOverheating(800);
// Throws an OverheatingError

3. Überwache die Maschine

Jetzt, wo deine Maschine Fehler erkennen kann, implementierst du eine Funktion, die auf diese Fehler unterschiedlich reagiert:

  • Wenn der Sensor defekt ist, musst du einen Techniker warnen
  • Wenn die Temperatur zu hoch ist, schaltest du entweder die Maschine ab, falls die Temperatur 600 °C überschreitet, oder du schaltest eine Warnleuchte ein, wenn sie darunter liegt.
  • Wenn ein anderer Fehler auftritt, löst du ihn erneut aus.

Implementiere eine Funktion monitorTheMachine, die ein Argument actions entgegennimmt.

actions ist ein Objekt mit vier Eigenschaften:

Eigenschaft Beschreibung
check eine Funktion. Überprüft die Temperatur der Maschine. Sie kann verschiedene Fehler auslösen.
alertDeadSensor eine Funktion. Benachrichtigt einen Techniker, dass der Temperatursensor defekt ist.
alertOverheating eine Funktion. Schaltet eine Warnleuchte an der Maschine ein.
shutdown eine Funktion. Schaltet die Maschine aus.

Die Funktion monitorTheMachine(actions) sollte intern check() aufrufen. Wenn das erfolgreich ist, sollte die Funktion nichts zurückgeben. Wenn dabei throw aufgerufen wird, wird ein anderes Verhalten erwartet:

Ausnahme erwartetes Verhalten
ArgumentError die Funktion alertDeadSensor aufrufen.
OverheatingError das Überhitzungsprotokoll ausführen.
(alles andere) den Fehler erneut auslösen

Überhitzungsprotokoll Wenn die Temperatur unter 600 °C liegt, schalte die Warnleuchte ein, indem du die Funktion alertOverheating aufrufst. Wenn die Temperatur 600 °C überschreitet, ist die Situation kritisch, also rufe die Funktion shutdown auf.

monitorTheMachine({
  check,
  alertDeadSensor,
  alertOverheating,
  shutdown,
});
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
JavaScript Exercism

Bereit, mit Fabriksensoren zu starten?

Melde dich bei Exercism an, um JavaScript mit 37 Konzepte159 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.