مدیریت خطا (Error Handling) 🛡️
کدهامون رو ضدضربه میکنیم تا با هر اشتباهی از کار نیفتن.
`try...catch`: تور نجات کدها!
هیچکس کامل نیست، کد ما هم همینطور! گاهی وقتا ممکنه یه خطایی پیش بیاد که کل برنامه رو از کار بندازه. بلوک `try...catch` مثل یه تور نجات عمل میکنه. ما کدهای "خطرناک" رو داخل بلوک `try` میذاریم. اگه خطایی اتفاق بیفته، برنامه کرش نمیکنه، بلکه میپره تو بلوک `catch` و ما اونجا میتونیم خطا رو مدیریت کنیم.
try {
// کدی که ممکنه خطا بده رو اینجا مینویسیم
console.log("شروع بلوک try...");
let user = { name: "علی" };
console.log(user.profile.age); // اینجا خطا میده چون profile وجود نداره
console.log("این خط هرگز اجرا نمیشه.");
} catch (error) {
// اگه خطایی تو بلوک try اتفاق افتاد، اینجا مدیریتش میکنیم
console.error("آخ! یه خطایی پیش اومد!");
console.error("نوع خطا:", error.name);
console.error("پیام خطا:", error.message);
} finally {
// این بلوک همیشه اجرا میشه، چه خطا بده چه نده
console.log("بلوک finally همیشه اجرا میشه.");
}
`throw`: خطای شخصی بساز!
گاهی وقتا خودمون میخوایم یه خطا ایجاد کنیم. مثلاً اگه کاربر یه ورودی اشتباه وارد کرد. با کلمه کلیدی `throw` میتونیم یه خطای سفارشی "پرتاب" کنیم که توسط بلوک `catch` گرفته بشه.
function divide(a, b) {
if (b === 0) {
// پرتاب کردن یه خطای جدید
throw new Error("تقسیم بر صفر مجاز نیست رفیق!");
}
return a / b;
}
try {
let result = divide(10, 0);
console.log(result);
} catch (error) {
console.error(error.message); // خروجی: "تقسیم بر صفر مجاز نیست رفیق!"
}
تمرین! 🧠
یه تابع بنویس به اسم `parseJson` که یه رشته متنی میگیره. داخل تابع، با `try...catch` تلاش کن که اون رشته رو به JSON تبدیل کنی (`JSON.parse`). اگه رشته معتبر بود، آبجکت JSON رو برگردون. اگه معتبر نبود و خطا داد، به جای کرش کردن، پیام "رشته ورودی معتبر نیست!" رو برگردون.
جواب تمرین
function parseJson(jsonString) {
try {
const result = JSON.parse(jsonString);
return result;
} catch (error) {
return "رشته ورودی معتبر نیست!";
}
}
const validJson = '{"name": "کتاب", "price": 50}';
const invalidJson = '{"name": "کتاب", price: 50}'; // اشتباه: کلید price کوتیشن نداره
console.log(parseJson(validJson)); // خروجی: {name: 'کتاب', price: 50}
console.log(parseJson(invalidJson)); // خروجی: "رشته ورودی معتبر نیست!"