Leçons du module (4/4)
try / catch / throw
Une erreur en JavaScript est une valeur (généralement un objet Error) qui interrompt
le flux normal et remonte la pile d'appels jusqu'à ce que quelqu'un la capture. La structure
pour gérer cette éventualité est try / catch.
Lever une erreur : throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw interrompt immédiatement la fonction en cours.
Capturer : 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.Tout ce qui se trouve dans try est exécuté ; si une erreur est levée (par un throw ou
par n'importe quelle opération qui échoue), le contrôle passe au bloc catch. La variable
après catch (...) reçoit l'objet d'erreur.
finally (optionnel)
Du code qui s'exécute toujours, qu'il y ait erreur ou non. Utile pour libérer des ressources :
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}Quand l'utiliser (et quand ne pas l'utiliser)
- Oui : opérations d'E/S (
JSON.parsesur des données non fiables,fetch, accès au disque), conversions pouvant échouer. - Peut-être pas : pour le flux de contrôle normal. Si tu sais qu'une entrée peut être invalide,
il est préférable de la vérifier avec un
ifplutôt que de lever et capturer une erreur.
// 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: '...' }À toi de jouer
Définis `safeDivide(a, b)` : si b vaut 0, lève une Error avec le message 'Divisione per zero', sinon renvoie a/b.
Afficher l'indice
if (b === 0) throw new Error('...'); puis return a / b.
Solution disponible après 3 tentatives
Exercice de révision
Définis `parseJsonSafe(text)` : si text est un JSON valide, renvoie { ok: true, value: <objet> }, sinon { ok: false }. Utilise try/catch autour de JSON.parse.
Afficher l'indice
Enveloppe JSON.parse dans un bloc try ; dans le catch, renvoie { ok: false }.
Solution disponible après 3 tentatives