Contoh Pengecualian dengan Atribut data- dalam JavaScript
Misalkan saat halaman dimuat, server membuat kode HTML yang menyimpan nama, harga dan jumlah produk yang dibeli:
<div id="product" data-product="apel" data-price="1000" data-amount="5"></div>
Mari kita buat fungsi yang akan menerima referensi ke elemen produk dan menemukan biaya total barang (harga dikalikan dengan kuantitas):
function getCost(elem) {
return elem.dataset.price * elem.dataset.amount;
}
Mari temukan biaya produk kami:
let product = document.querySelector('#product');
let cost = getCost(product);
alert(cost);
Sekarang anggap situasi berikut: karena gangguan tertentu di server, server mengirimkan produk yang tidak memiliki harga atau kuantitas (atau keduanya sekaligus), misalnya, seperti ini:
<div id="product" data-product="apel" data-price="1000"></div>
Jika sekarang mencoba menghitung biaya produk, hasilnya yang akan ditampilkan di layar adalah NaN. Setuju, tidak terlalu informatif.
Ternyata, kita perlu melindungi diri dari ketidakhadiran atribut yang kita butuhkan. Ini dapat dilakukan dengan dua cara. Cara pertama adalah dengan mengatakan bahwa ini adalah perilaku normal dan hanya memeriksa keberadaan atribut yang kita butuhkan dengan if:
function getCost(elem) {
if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
return elem.dataset.price * elem.dataset.amount;
} else {
return 0; // mengembalikan sesuatu, misalnya, 0 atau null atau false
}
}
Opsi kedua adalah dengan mengatakan bahwa tidak adanya
atribut data-price atau data-amount
adalah situasi yang luar biasa. Dalam hal ini
kita akan melemparkan pengecualian:
function getCost(elem) {
if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
return elem.dataset.price * elem.dataset.amount;
} else {
throw {
name: 'ProductCostError',
message: 'harga atau kuantitas produk tidak ada'
};
}
}
Manakah dari dua opsi yang lebih tepat untuk diterapkan di sini - ini adalah pilihan programmer. Dia dapat menganggap masalah tersebut sebagai pekerjaan normal skrip atau situasi yang luar biasa.
Misalkan kita memutuskan bahwa situasinya luar biasa. Maka kode untuk mendapatkan biaya produk akan terlihat seperti ini:
let product = document.querySelector('#product');
try {
let cost = getCost(product);
alert(cost);
} catch (error) {
// bereaksi terhadap pengecualian dengan cara tertentu
}
Ubah kode saya sehingga fungsi getCost
melemparkan dua jenis pengecualian: jika harga tidak ada
dan jika kuantitas tidak ada. Pikirkan baik-baik
tentang nama pengecualian ini.
Di blok catch, tampilkan pesan kesalahan yang berbeda
untuk pengecualian dengan jenis yang berbeda.