Poikkeusten heittäminen JavaScriptissä
Edellisillä oppitunneilla opimme kaksi paikkaa, joissa JavaScript heittää poikkeuksen mahdollisten ongelmien sattuessa.
Projektissasi voi kuitenkin olla muitakin tilanteita, jotka sinulle ovat poikkeuksellisia, mutta eivät JavaScriptille. Tällöin voit luoda ja heittää omia, mukautettuja poikkeuksia.
Käydään läpi tarvittava syntaksi.
Aluksi poikkeus on luotava
komennolla new Error, välittämällä
poikkeuksen teksti parametrina:
new Error('poikkeuksen teksti');
Tämä poikkeus on sitten heitettävä käyttämällä
komentoa throw:
throw new Error('poikkeuksen teksti');
Poikkeuksen heittäminen pakottaa JavaScriptin
tunnistamaan, että on tapahtunut poikkeuksellinen tilanne.
Tämä tarkoittaa, että tällaisen poikkeuksen voi kaapata
käyttämällä try-catch -rakennetta ja
käsitellä sen halutulla tavalla.
Katsotaan esimerkkiä, kuinka tätä käytetään. Oletetaan, että meillä on funktio, joka jakaa yhden luvun toisella:
function div(a, b) {
return a / b;
}
Oletetaan, että nollalla jakaminen on
kiellettyä ja yritys tehdä niin pitäisi
aiheuttaa poikkeustilanne. Tarkistetaan
funktiossa, yritetäänkö jakaa
nollalla 0. Jos ei - jaetaan,
mutta jos kyllä - heitetään poikkeus:
function div(a, b) {
if (b !== 0) {
return a / b;
} else {
throw new Error('virhe nollalla jaossa');
}
}
Yritetään ensin jakaa
nollalla 0, sieppaamatta poikkeusta:
alert( div(3, 0) );
Tässä tapauksessa skriptin suoritus keskeytyy
ja konsoliin ilmestyy virhe tekstillä 'virhe
nollalla jaossa' (tarkista). Siepataan
nyt virhe ja käsitellään se jollakin tavalla:
try {
alert( div(3, 0) );
} catch (error) {
alert('yrität jakaa nollalla, mikä on kielletty');
}
JavaScriptissä yritys erottaa negatiivisen luvun neliöjuuri ei aiheuta poikkeuksen heittämistä:
let result = Math.sqrt(-1);
console.log(result); // tulostaa NaN
Kirjoita oma funktiosi, joka erottaa neliöjuuren luvusta ja heittää poikkeuksen, jos neliöjuuri yritetään erottaa negatiivisesta luvusta.