Ana içeriğe geç
Modül 5 · Ders 4 ders 4Kurstaki 20/32~12 min
Modül dersleri (4/4)

dene / yakala / at

JavaScript'teki hata, normal akışı kesintiye uğratan bir değerdir (genellikle bir Error nesnesi) ve birisi onu yakalayana kadar çağrı yığınını kabartır. Bu durumu ele alacak yapı try / catch.

Hata atılıyor: throw

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

throw mevcut işlevi anında kesintiye uğratır.

İlgi çekici: 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.

try içindeki her şey yürütülür; bir hata atılırsa (throw aracılığıyla veya herhangi bir işlemle) başarısız olursa), kontrol catch bloğuna atlar. catch (...)'den sonraki değişken hatayı alıyor.

finally (isteğe bağlı)

Hata olsun ya da olmasın her zaman çalışan kod. Kaynakları kapatmak için kullanışlıdır:

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

Ne zaman kullanılmalı (ve ne zaman kullanılmamalı)

  • Evet: G/Ç işlemleri (güvenilmeyen girişte JSON.parse, fetch, disk erişimi), dönüşümler başarısız olabilir.
  • Belki de değil: normal akış için. Bir girişin geçersiz olabileceğini biliyorsanız kontrol etmeniz daha iyi olur if ile fırlatıp yakalamaktan daha iyidir.
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: '...' }

Deneyin

Egzersiz#js.m5.l4.e1
Denemeler: 0Yükleniyor…

SafeDivide(a, b)`yi tanımlayın: eğer b 0 ise 'Sıfır başına bölme' mesajını içeren bir Hata atar, aksi takdirde a/b değerini döndürür.

Düzenleyici yükleniyor…
İpucu göster

if (b === 0) throw new Error('...'); sonra a / b'yi döndürün.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#js.m5.l4.e2
Denemeler: 0Yükleniyor…

`parseJsonSafe(text)`i tanımlayın: eğer metin geçerliyse JSON döndürün { ok: true, value: <object> }, aksi takdirde { ok: false }. JSON.parse'da try/catch'i kullanın.

Düzenleyici yükleniyor…
İpucu göster

JSON.parse'ı denemede sarın; yakalama dönüşünde { ok: false }.

3 denemeden sonra çözüm mevcut