Kurzusok
/
JavaScript
JavaScript
/
Feladatok
/
Gyári érzékelők
Gyári érzékelők

Gyári érzékelők

Tanulófeladat

Bevezetés

Hibák

A hibákat érdemes jelezni, ha valami hibás vagy váratlan dolog történik egy programban vagy egy kódrészletben.

Ezek JavaScript-objektumok.

Az objektum legfontosabb tulajdonsága a message:

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

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

A throw szintaxissal hibát dobhatsz.

throw new Error('Oops');

Amikor egy hiba eldobódik, a jelenlegi végrehajtás leáll, és a hívási verem első catch blokkjában folytatódik.

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

Öröklődés

Az öröklődés lehetőséget ad arra, hogy szülő-gyermek kapcsolatot hozz létre osztályok között. A gyermekosztály (amit néha alosztálynak neveznek) hozzáfér a szülőosztály (amit néha ősosztálynak neveznek) által meghatározott viselkedéshez és adatokhoz.

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.

Az extends kulcsszó a gyermekosztály deklarációjában a prototípusláncon keresztül teremt kapcsolatot a szülőosztállyal.

A gyermek konstruktorával létrehozott objektumok prototípusláncában ott lesz a szülőosztály prototípusa, így hozzáférnek a szülő által meghatározott metódusokhoz és adatokhoz.

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

Ahogy a JavaScript minden osztályánál, az alosztályok örökölhetnek az Error osztályból, hogy az extends kulcsszóval egyedi hibákat hozzanak létre. Az instanceof szintaxis ellenőrzi, hogy az elkapott hiba az Error egy adott alosztályának példánya-e.

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

Utasítások

Elena egy újsággyár új minőségmenedzsere. Mivel nemrég érkezett a céghez, úgy döntött, hogy áttekinti a gyár néhány folyamatát, hátha talál valamit, amin javítani lehet. Rájött, hogy a technikusok rengeteg minőségellenőrzést végeznek kézzel. Jó lehetőséget lát az automatizálásra, ezért felkér téged, szabadúszó fejlesztőt, hogy fejlessz egy szoftvert néhány gép felügyeletére.

1. Figyeld a helyiség páratartalmát

Az első küldetésed, hogy írj egy szoftvert, amely a termelőhelyiség páratartalmát figyeli. Már van egy érzékelő, amely a cég szoftveréhez csatlakozik, és rendszeresen visszaadja a helyiség páratartalmát százalékban.

A szoftverben implementálnod kell egy függvényt, amely hibát dob, ha a páratartalom túl magas. A függvény neve checkHumidityLevel legyen, és a páratartalmat paraméterként kapja.

Dobj hibát (az üzenet nem fontos), ha a százalék meghaladja a 70%-ot.

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

2. Ismerd fel a túlmelegedést

Elena nagyon elégedett az első feladatoddal, és arra kér, hogy foglalkozz a gépek hőmérsékletének figyelésével. Amikor Greg technikussal beszélgetsz, megtudod, hogy ha egy gép hőmérséklete meghaladja az 500°C-ot, a technikusok aggódni kezdenek a túlmelegedés miatt.

A gép fel van szerelve egy érzékelővel, amely a belső hőmérsékletét méri. Tudd, hogy az érzékelő nagyon érzékeny, és gyakran elromlik. Ilyenkor a technikusoknak ki kell cserélniük.

A feladatod, hogy implementálj egy reportOverheating függvényt, amely paraméterként kapja a hőmérsékletet, és hibát dob, ha az érzékelő elromlott, vagy ha a gép túlmelegedni kezd. Mivel később a hiba függvényében máshogy kell majd reagálnod, szükséged lesz egy mechanizmusra, amellyel meg tudod különböztetni a kétféle hibát. Támaszkodhatnál a hibaüzenetekre, de ez törékennyé tenné a kódodat, mert elromlana, ha az üzenet megváltozik. Ahhoz, hogy ezt rendesen meg tudd oldani, különböző hibaosztályok példányait fogod dobni.

  • Ha az érzékelő elromlott, a hőmérséklet null lesz. Ebben az esetben egy ArgumentError-t kell dobnod.
  • Ha minden rendben működik, és a hőmérséklet meghaladja az 500°C-ot, egy OverheatingError-t kell dobnod. Ezt a hibaosztályt egy hőmérséklet argumentummal példányosítjuk. Ügyelj rá, hogy a dobott OverheatingError-hez tartozzon egy temperature tulajdonság.
reportOverheating(null);
// Throws an ArgumentError
reportOverheating(800);
// Throws an OverheatingError

3. Figyeld a gépet

Most, hogy a géped fel tudja ismerni a hibákat, implementálj egy függvényt, amely különbözőképpen reagál ezekre a hibákra:

  • Ha az érzékelő elromlott, értesítened kell egy technikust.
  • Ha a hőmérséklet túl magas, akkor leállítod a gépet, ha meghaladja a 600°C-ot, vagy felkapcsolsz egy figyelmeztető lámpát, ha ez alatt marad.
  • Ha más hiba történik, újradobod azt.

Implementálj egy monitorTheMachine függvényt, amely egy actions argumentumot kap.

Az actions egy objektum, amelynek 4 tulajdonsága van:

tulajdonság leírás
check egy függvény. Ellenőrzi a gép hőmérsékletét. Különféle hibákat dobhat.
alertDeadSensor egy függvény. Értesíti a technikust, hogy a hőmérséklet-érzékelő tönkrement.
alertOverheating egy függvény. Felkapcsolja a gépen a figyelmeztető lámpát.
shutdown egy függvény. Kikapcsolja a gépet.

A monitorTheMachine(actions) függvénynek belül meg kell hívnia a check()-et. Ha az ellenőrzés sikeres, a függvény ne adjon vissza semmit. Ha viszont throw-mal dob hibát, más viselkedésre számíthatsz:

kivétel várt viselkedés
ArgumentError hívd meg az alertDeadSensor függvényt.
OverheatingError hajtsd végre a túlmelegedési protokollt.
(bármi más) dobd tovább a hibát

Túlmelegedési protokoll Ha a hőmérséklet kevesebb, mint 600 °C, kapcsold fel a figyelmeztető lámpát az alertOverheating függvény meghívásával. Ha a hőmérséklet meghaladja a 600 °C-ot, a helyzet kritikus, ezért hívd meg a shutdown függvényt.

monitorTheMachine({
  check,
  alertDeadSensor,
  alertOverheating,
  shutdown,
});
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
JavaScript Exercism

Készen állsz elkezdeni a(z) Gyári érzékelők feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) JavaScript nyelvet 37 fogalom159 feladat segítségével, valódi emberi mentorálással, mindez ingyen.