Shembull i Përjashtimit me Atributet data- në JavaScript
Le të supozojmë se gjatë ngarkimit të faqes, serveri kriyon kodin HTML, ku ruhen emri, çmimi dhe sasia e produktit të blerë:
<div id="product" data-product="mollë" data-price="1000" data-amount="5"></div>
Le të krijojmë një funksion që do të pranojë një referencë për elementin me produktin dhe do të gjejë vlerën totale të mallit (çmimin e shumëzuar me sasinë):
function getCost(elem) {
return elem.dataset.price * elem.dataset.amount;
}
Le të gjejmë koston e produktit tonë:
let product = document.querySelector('#product');
let cost = getCost(product);
alert(cost);
Supozoni tani situatën e mëposhtme: për shkak të ndonjë dështimi në server, ai na dërgoi një produkt në të cilin mungon çmimi ose sasia (ose të dyja njëkohësisht), për shembull, kështu:
<div id="product" data-product="mollë" data-price="1000"></div>
Nëse tani përpiqeni të llogaritni koston e produktit, rezultati që do të shfaqet në ekran do të jetë NaN. Do të ishit dakord, jo shumë informuese.
Kjo do të thotë se ne duhet të mbrohemi në një farë mënyre nga fakti që atribute të nevojshme për ne mund të mungojnë. Kjo mund të bëhet në dy mënyra. Mënyra e parë - është të thuhet se kjo është sjellje normale dhe thjesht të kontrollohet me if praninë e atributeve që na duhen:
function getCost(elem) {
if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
return elem.dataset.price * elem.dataset.amount;
} else {
return 0; // kthejmë diçka, për shembull, 0 ose null ose false
}
}
Opsioni i dytë - është të thuhet se mungesa
e atributit data-price ose data-amount
është një situatë e jashtëzakonshme. Në këtë rast
ne do të hedhim një përjashtim:
function getCost(elem) {
if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
return elem.dataset.price * elem.dataset.amount;
} else {
throw {
name: 'ProductCostError',
message: 'mungon çmimi ose sasia e produktit'
};
}
}
Cili nga dy opsionet është më i përshtatshëm të aplikohet këtu - është zgjedhje e programuesit. Ai mund ta konsiderojë problemin si punë normale të skriptit ose si situatë të jashtëzakonshme.
Le të supozojmë se ne kemi vendosur që situata është e jashtëzakonshme. Atëherë kodi për marrjen e kostos së produktit do të duket kështu:
let product = document.querySelector('#product');
try {
let cost = getCost(product);
alert(cost);
} catch (error) {
// reagojmë në një farë mënyre te përjashtimi
}
Modifikoni kodin tim në mënyrë që funksioni getCost
të hedhë dy lloje përjashtimesh: nëse mungon
çmimi dhe nëse mungon sasia. Mendoni mirë
për emrat e këtyre përjashtimeve.
Në bllokun catch shfaqni mesazhe të ndryshme
gresh për përjashtime të llojeve të ndryshme.