שיעורי מודול (4/4)
לנסות / לתפוס / לזרוק
שגיאה ב-JavaScript היא ערך (בדרך כלל אובייקט Error) שקוטע את הזרימה הרגילה
ומעלה את ערימת השיחות עד שמישהו תופס אותה. המבנה לטיפול במקרה זה הוא
try / catch.
זריקת שגיאה: throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw קוטע מיד את הפונקציה הנוכחית.
תופס: 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.הכל בתוך try מבוצע; אם נזרקת שגיאה (דרך throw או על ידי כל פעולה שהיא
נכשל), הבקרה קופצת לבלוק catch. המשתנה שאחרי catch (...) מקבל את השגיאה.
finally (אופציונלי)
קוד שפועל תמיד, טעות או לא. שימושי לסגירת משאבים:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}מתי להשתמש בו (ומתי לא)
- כן: פעולות I/O (
JSON.parseעל קלט לא מהימן,fetch, גישה לדיסק), המרות ש יכול להיכשל. - אולי לא: לזרימה הרגילה. אם אתה יודע שקלט עשוי להיות לא חוקי, עדיף לבדוק אותו
עם
ifמאשר לזרוק ולתפוס.
// 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: '...' }נסה את זה
הגדר `safeDivide(a,b)`: אם b הוא 0, זרקו שגיאה עם ההודעה 'Divisione per zero', אחרת החזר a/b.
הצג רמז
if (b === 0) throw new Error('...'); לאחר מכן החזר א/ב.
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
הגדר `parseJsonSafe(text)`: אם הטקסט חוקי JSON החזר { ok: true, value: <object> }, אחרת { ok: false }. השתמש ב- try/catch ב-JSON.parse.
הצג רמז
עטוף את JSON.parse ב-try; ב-catch מחזירים { בסדר: false }.
הפתרון זמין לאחר 3 ניסיונות