Finally yoki faqat kodmi?
Ikkala kod fragmentlarini solishtiring.
-
Birinchisi,
try..catch
dan so’ng kodni bajarish uchunfinally
dan foydalanadi:try { work work } catch (err) { handle errors } finally { cleanup the working space }
-
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.