Vai al contenuto
eLearner.app
Modulo 5 · Lezione 4 di 420/32 nel corso~12 min
Lezioni del modulo (4/4)

try / catch / throw

Un errore in JavaScript è un valore (di solito un oggetto Error) che interrompe il flusso normale e risale lo stack di chiamate finché qualcuno non lo cattura. Il costrutto per gestire questa eventualità è try / catch.

Sollevare un errore: throw

JS
function dividi(a, b) {
  if (b === 0) {
    throw new Error('Divisione per zero');
  }
  return a / b;
}

throw interrompe immediatamente la funzione corrente.

Catturare: try / catch

JS
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.

Tutto quello che è dentro try viene eseguito; se viene lanciato un errore (con throw o da qualunque operazione che fallisce), il controllo salta al blocco catch. La variabile dopo catch (...) riceve l'errore.

finally (opzionale)

Codice che gira sempre, errore o no. Utile per chiudere risorse:

JS
try {
  // ... operazione rischiosa
} catch (err) {
  // ... log
} finally {
  // ... pulizia (sempre eseguita)
}

Quando usarlo (e quando no)

  • : operazioni I/O (JSON.parse su input non fidato, fetch, accesso disco), conversioni che possono fallire.
  • Forse no: per il flusso normale. Se sai che un input può essere invalido, è meglio controllarlo con un if che lanciare e catturare.
JS
// 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: '...' }

Prova tu

Esercizio#js.m5.l4.e1
Tentativi: 0Caricamento…

Definisci `safeDivide(a, b)`: se b è 0 lancia un Error con messaggio 'Divisione per zero', altrimenti restituisce a/b.

Caricamento editor…
Mostra suggerimento

if (b === 0) throw new Error('...'); poi return a / b.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#js.m5.l4.e2
Tentativi: 0Caricamento…

Definisci `parseJsonSafe(text)`: se text è JSON valido restituisce { ok: true, value: <oggetto> }, altrimenti { ok: false }. Usa try/catch su JSON.parse.

Caricamento editor…
Mostra suggerimento

Avvolgi JSON.parse in try; nel catch restituisci { ok: false }.

Soluzione disponibile dopo 3 tentativi