ناساندنی مامەڵەکردن لەگەڵ هەڵەکان

لە جیهانی بەرنامەسازییدا، هەموو کۆدێک بە تەواوی و بێ کێشە کار ناکات. هەندێک جار هەڵەکان بەهۆی تێگەیشتنی هەڵەی بەکارهێنەر، کێشەی تۆڕ، یان گۆڕاوی نەناسراو ڕوودەدەن. لە جاڤاسکریپتدا، ئەگەر هەڵەیەک ڕووبدات و ئێمە چارەسەری نەکەین، بەرنامەکە بە تەواوی دەوەستێت (Crash دەکات).

تێبینی: مامەڵەکردن لەگەڵ هەڵەکان (Error Handling) یەکێکە لە گرنگترین لێهاتووییەکانی هەر بەرنامەنووسێکی پیشەگەر بۆ ئەوەی ئەزموونی بەکارهێنەر (User Experience) پارێزراو بێت.

بەکارهێنانی try...catch

دەستەواژەی try...catch ڕێگامان پێدەدات کۆدێک تاقی بکەینەوە (Try) و ئەگەر هەڵەیەک تێیدا بوو، بەبێ وەستانی بەرنامەکە، کۆنترۆڵی بکەین (Catch).

try {
  // کۆدی مەترسیدار لێرە دادەنرێت
  let x = 10;
  console.log(x / y); // یاری نەناسراوە و هەڵە دروست دەکات
} catch (err) {
  // ئەگەر هەڵەیەک هەبوو، ئەم بەشە جێبەجێ دەبێت
  console.log("هەڵەیەک ڕوویدا: " + err.message);
}
console.log("بەرنامەکە بەردەوامە!");

لە نموونەی سەرەوەدا، y پێناسە نەکراوە، بۆیە catch هەڵەکە دەگرێت و پەیامێک نیشان دەدات، پاشان بەرنامەکە بەردەوام دەبێت لە جێبەجێکردنی هێڵی کۆتایی.

بەکارهێنانی finally

بەشی finally بەشێکی خۆویستە کە هەمیشە جێبەجێ دەبێت، جا هەڵە ڕووبدات یان نا. ئەمە بۆ پاککردنەوەی سەرچاوەکان یان داخستنی پەیوەندییەکان بەکاردێت.

try {
  console.log("هەوڵدان بۆ کردنەوەی داتابەیس...");
  throw new Error("کێشەیەک لە پەیوەندی هەیە");
} catch (e) {
  console.log("هەڵە گیرا: " + e.message);
} finally {
  console.log("داخستنی داتابەیس بە شێوەیەکی سەلامەت.");
}

فڕێدانی هەڵە بە throw

هەندێک جار پێویستە خۆمان بە ئەنقەست هەڵەیەک دروست بکەین کاتێک مەرجێک جێبەجێ نابێت. بۆ ئەمە throw بەکاردەهێنین.

function checkAge(age) {
  if (age < 18) {
    throw new Error("تەمەنت کەمە بۆ ئەم کارە!");
  }
  return "بەخێر بێیت!";
}

try {
  console.log(checkAge(15));
} catch (e) {
  console.log("ئاگاداری: " + e.message);
}
ئاگاداری: هەرگیز try...catch لە ناو لوپێکی زۆر گەورەدا بەکارمەهێنە ئەگەر پێویست نەبێت، چونکە کاریگەری لەسەر خێرایی بەرنامەکە دەبێت. تەنها ئەو بەشەی کۆدەکە بخەرە ناو try کە گومانت لە دروستییەکەی هەیە.

جۆرەکانی هەڵە لە جاڤاسکریپت

جاڤاسکریپت چەند جۆرێکی سەرەکی هەڵەی هەیە کە دەتوانیت لە catch دا بیانناسیەوە:

  • SyntaxError: هەڵە لە نووسینی کۆدەکەدا.
  • ReferenceError: بەکارهێنانی گۆڕاوێک کە پێناسە نەکراوە.
  • TypeError: بەکارهێنانی جۆرێکی هەڵە بۆ گۆڕاوێک (بۆ نموونە بانگکردنی ژمارەیەک وەک فەنکشن).

ڕاهێنانی پراکتیکی

ئەرک: فەنکشنێک بنووسە بە ناوی divideNumbers(a, b) کە دوو ژمارە وەردەگرێت. ئەگەر b سفر بوو، بە throw هەڵەیەک دروست بکە بە ناوی "ناتوانیت دابەشی سفر بکەیت". پاشان بە try...catch بانگی بکە و هەڵەکە بگرە.