الرجوع الي الدرس

Finally أم الكود فقط؟

الأهمية: 5

قارن بين جزئي الكود.

  1. الأول يستخدم finally لتنفيذ الكود بعد try...catch:

    try {
      work work
    } catch (err) {
      handle errors
    } finally {
      تنظيف مكان العمل
    }
  2. القطعة الثانية تضع عملية التنظيف مباشرة بعد try...catch:

    try {
      work work
    } catch (err) {
      handle errors
    }
    
    تنظيف مكان العمل

نحن بالتأكيد بحاجة إلى التنظيف بعد العمل ، لا يهم إذا كان هناك خطأ أم لا.

هل هناك ميزة في استخدام finally أم أن جزئي الكود متساويان؟ إذا كان هناك مثل هذه الميزة ، فقم بإعطاء مثال عندما يكزن مهم.

يصبح الفرق واضحًا عندما ننظر إلى الكود داخل دالة.

السلوك يختلف إذا كان هناك “الانتقال” من try...catch.

على سبيل المثال، عند وجود return داخل try...catch. الشرط finally يعمل في حالة أي خروج من try...catch، حتى عند استخدام عبارة return: مباشرة بعد انتهاء try...catch، ولكن قبل أن يستعيد الكود السيطرة.

function f() {
  try {
    alert('إبدء');
    return "النتيجة";
  } catch (err) {
    /// ...
  } finally {
    alert('نظف!');
  }
}

f(); // نظف!

…أو عندما يكون هناك throw, مثلما هو الحال هنا:

function f() {
  try {
    alert('إبدء');
    throw new Error("an error");
  } catch (err) {
    // ...
    if("can't handle the error") {
      throw err;
    }

  } finally {
    alert('نظف!')
  }
}

f(); // نظف!

يضمن finally التنظيف. إذا وضعنا الكود في نهاية f, فلن يتم تشغيلها في هذه المواقف.