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"
}
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');
}
}
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.
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
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.
null lesz.
Ebben az esetben egy ArgumentError-t kell dobnod.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
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:
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,
});
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.