Pelajaran modul (4/4)
coba / tangkap / lempar
Kesalahan dalam JavaScript adalah nilai (biasanya objek Error) yang mengganggu aliran normal
dan menggembungkan tumpukan panggilan sampai seseorang menangkapnya. Konstruk untuk menangani kasus ini adalah
try / catch.
Terjadi kesalahan: throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw segera menghentikan fungsi saat ini.
Penangkapan: try / catch
try {
const r = dividi(10, 0);
console.log('ok', r);
} catch (err) {
console.log('errore:', err.message); // 'errore: Divisione per zero'
}
// Il programma continua qui, anche se c'è stato un errore.Segala sesuatu di dalam try dijalankan; jika terjadi kesalahan (melalui throw atau dengan operasi apa pun yang
gagal), kontrol melompat ke blok catch. Variabel setelah catch (...) menerima kesalahan.
finally (opsional)
Kode yang selalu berjalan, error atau tidak. Berguna untuk menutup sumber daya:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}Kapan menggunakannya (dan kapan tidak)
- Ya: Operasi I/O (
JSON.parsepada input tidak tepercaya,fetch, akses disk), konversi yang bisa gagal. - Mungkin tidak: untuk aliran normal. Jika Anda mengetahui suatu masukan mungkin tidak valid, lebih baik untuk memeriksanya
dengan
ifdaripada melempar dan menangkap.
// Tipico: parsing JSON difensivo
function parseJsonSafe(text) {
try {
return { ok: true, value: JSON.parse(text) };
} catch (err) {
return { ok: false, error: err.message };
}
}
parseJsonSafe('{"a":1}'); // { ok: true, value: {a:1} }
parseJsonSafe('non json'); // { ok: false, error: '...' }Cobalah
Tentukan `safeDivide(a, b)`: jika b adalah 0, buatlah Kesalahan dengan pesan 'Divisione per zero', jika tidak, kembalikan a/b.
Tunjukkan petunjuk
if (b === 0) melempar Error baru('...'); lalu kembalikan a/b.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Tentukan `parseJsonSafe(teks)`: jika teks valid JSON kembalikan { ok: benar, nilai: <objek> }, jika tidak { ok: salah }. Gunakan coba/tangkap di JSON.parse.
Tunjukkan petunjuk
Bungkus JSON.parse di try; di tangkapan kembalikan { ok: false }.
Solusi tersedia setelah 3 upaya