الانتقال إلى المحتوى الرئيسي
الوحدة 5 · الدرس 4 من 420/32 في الدورة~12 min
دروس الوحدة (4/4)

حاول / قبض / رمي

الخطأ في JavaScript هو قيمة (عادةً كائن Error) يقاطع التدفق الطبيعي والفقاعات تصل إلى مكدس الاستدعاءات حتى يلتقطها شخص ما. البناء للتعامل مع هذه الحالة هو try / catch.

ظهور خطأ: throw

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

throw يقاطع الوظيفة الحالية على الفور.

الالتقاط: 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؛ إذا تم إلقاء خطأ (عبر throw أو عن طريق أي عملية يفشل)، ينتقل عنصر التحكم إلى الكتلة catch. يتلقى المتغير بعد catch (...) الخطأ.

محمي_INLINE_13 (اختياري)

الكود الذي يتم تشغيله دائمًا، خطأ أم لا. مفيد لإغلاق الموارد:

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

متى تستخدمه (ومتى لا)

  • نعم: عمليات الإدخال/الإخراج (JSON.parse على الإدخال غير الموثوق به، fetch، الوصول إلى القرص)، والتحويلات التي يمكن أن تفشل.
  • ربما لا: للتدفق الطبيعي. إذا كنت تعلم أن أحد الإدخالات قد يكون غير صالح، فمن الأفضل التحقق منه باستخدام if بدلاً من الرمي والالتقاط.
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: '...' }

جربه

تمرين#js.m5.l4.e1
المحاولات: 0جارٍ التحميل…

حدد `safeDivide(a, b)`: إذا كانت b تساوي 0، فقم بإلقاء خطأ مع الرسالة "Divisione per Zero"، وإلا قم بإرجاع a/b.

جارٍ تحميل المحرر…
إظهار التلميح

إذا (ب === 0) رمي خطأ جديد('...'); ثم العودة أ / ب.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#js.m5.l4.e2
المحاولات: 0جارٍ التحميل…

حدد `parseJsonSafe(text)`: إذا كان النص صالحًا، قم بإرجاع JSON { ok: true، value: <object> }، وإلا { ok: false }. استخدم محاولة/التقاط على JSON.parse.

جارٍ تحميل المحرر…
إظهار التلميح

لف JSON.parse في المحاولة؛ في الإرجاع {حسنًا: خطأ}.

الحل متاح بعد 3 من المحاولات