darsga qaytish

Finally yoki faqat kodmi?

Ikkala kod fragmentlarini solishtiring.

  1. Birinchisi, try..catch dan so’ng kodni bajarish uchun finally dan foydalanadi:

    try {
      work work
    } catch (err) {
      handle errors
    } finally {
      cleanup the working space
    }
  2. Ikkinchi fragment tozalashni darhol try..catch dan so’ng qo’yadi:

    try {
      work work
    } catch (err) {
      handle errors
    }
    
    cleanup the working space

Ish boshlangandan so’ng, albatta, bizga tozalash kerak, xato bor yoki yo’qligi muhim emas.

Bu erda finally dan foydalanishning afzalligi bormi yoki ikkala kod fragmenti tengmi? Agar bunday ustunlik bo’lsa misol keltiring.

Agar funktsiya ichidagi kodni ko’rib chiqsak, farq aniq bo’ladi.

Agar try..catch dan “sakrab” chiqsa, xatti-harakatlar boshqacha bo’ladi.

Masalan, return try..catch ichida mavjud bo’lganda. finally bandi try..catch dan har qanday chiqish holatida, hatto return ifodasi orqali ishlaydi: try..catch tugashi bilanoq, lekin chaqiruv kodidan oldin boshqaruvni oladi.

function f() {
  try {
    alert('start');
    return "result";
  } catch (err) {
    /// ...
  } finally {
    alert('cleanup!');
  }
}

f(); // cleanup!

…Yoki throw bo’lganida, bu yerda bo’lgani kabi:

function f() {
  try {
    alert('start');
    throw new Error("xato");
  } catch (e) {
    // ...
    if("xatoni bartaraf eta olmaydi") {
      throw err;
    }

  } finally {
    alert('cleanup!')
  }
}

f(); // cleanup!

Bu yerda tozalashni kafolatlaydigan finally ifodasi. Agar biz kodni f ning oxiriga qo’ysak, u ishlamaydi.