نود و هفت چیز که هر برنامه‌نویسی باید بداند: مدیریت اکسپشن‌ها


یک Exception (اکسپشن یا استثناء) مشکلی است که در زمان اجرای برنامه رخ می دهد. زمانی که یک اکسپشن اتفاق می افتد جریان عادی برنامه مختل می شود و برنامه یا اپلیکیشن به طور غیر عادی پایان می یابد.

برای جلوگیری از چنین پایان ناخواسته ای باید اکسپشن ها مدیریت یا هَندل شوند و عملیات لازم برای رفع مشکل انجام شود. از این رو در زمان رخ دادن یک اکسپشن آبجکتی تحت عنوان Exception Object ایجاد می شود که حاوی اطلاعاتی در مورد نوع و زمان ایجاد خطا در برنامه یا اپلیکیشن است، سپس این آبجکت در اختیار سیستم قرار می گیرد. از این مرحله به بعد، سیستم سعی می کند تا راهی برای رفع خطا پیدا کند. اگر سیستم قطعه کدی پیدا کند که بتواند خطای ایجاد شده را رفع کند، استفاده ی مجدد از سیستم امکان پذیر خواهد بود. پس لازم است در بخش هایی از برنامه که احتمال بروز اکسپشن وجود دارد از قبل آینده نگری شود و برای مدیریت اکسپشن ها برنامه ریزی و کدنویسی شود. رخ دادن یک اکسپشن می تواند دلایل زیادی داشته باشد که برخی از مهم ترین آن ها عبارتند از:
- کاربر داده ی نامعتبری وارد کرده است.
- برنامه برای اجرا نیاز به فایلی دارد که نمی تواند آن را پیدا کند و محتوای آن را بخواند.
- ارتباط با شبکه قطع می شود و یا حافظه ی دستگاه از دسترس خارج می شود.

برخی از این سناریوها به دلیل خطای کاربر، برخی بواسطه ی خطای برنامه نویس و دسته ای دیگر به خاطر نبود ریسورس کافی یا بهتر بگوییم «منابع فیزیکی» اتفاق می افتند. با این حال تمام این اکسپشن ها در دسته ی "خطاهای فنی" قرار می گیرند. در کنار این خطاها گروهی دیگری از اکسپشن ها وجود دارند که به واسطه ی برآورده نشدن Business Logic اتفاق می افتند. برای مثال فرض کنیم اپلیکیشنی طراحی شده است که به کاربران امکان خرید آنلاین می دهد. حال یکی از کاربران این اپلیکیشن بخواهد خریدی انجام دهد، اما اعتبار پولی کافی در حساب خود نداشته باشد. در این صورت یک شرایط استثناء اتفاق می افتد که مربوط به جنبه های فنی برنامه نمی شود، بلکه «منطق تجاری» برنامه این اجازه را به کاربر نمی دهد که با اعتبار ناکافی تراکنش خود را انجام دهد.

نکته ای که باید در مورد اکسپشن ها رعایت شود این است که می بایست بین انواع فنی و عملی اکسپشن ها تمایز قائل شویم. با این کار، امکان این را خواهیم داشت که از مکانیزم های عمومی مدیریت اکسپشن ها در زبان های برنامه نویسی مختلف استفاده کرده و حتی برای مدیریت اکسپشن ها از برخی فریم ورک های نرم افزاری استفاده کنیم، اما در مورد اکسپشن های عملی باید کاربر حتما از شرایط استثنایی رخ داده شده آگاه شود و آماده ی مدیریت آن باشد، که در این موارد بهتر است یک اکسپشن جداگانه یا سلسله مراتب استثناء متمایز برای مدیریت اکسپشن ها در نظر گرفته شود تا کاربر بتواند بر اساس شرایط خود، آن ها را مدیریت کند.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
محسن
محسن
یکی از راه های معمول Exception Controll استفاده از try و catch هست
قطعه کد زیر یک مثال خیلی ساده از این موضوع در جاوااسکریپت است

try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
محسن
محسن
مدیریت اکسپشن‌ها شاید در نگاه اول مربوط به مسایل فنی پروژه باشه
اما ارتباط دقیقی با مفهوم UX در پروژه داره اینکه پیشبینی بشه کاربر در طول کار با برنامه ممکن هست با چه پیغام های خطایی مواجه بشه و بعد از اون چه راهکاری باید بهش ارایه بشه اهمیت زیادی داره
یکی از مهمترین بخش هایی که با این موضوع مرتبط میشه test and debug هست که هرچقدر با دقت بیشتری انجام بشه، قطعا کاربر تجربه بهتری از کار با محصول خواهد داشت
به طور خلاصه باید تمام سناریوهایی که کاربر هنگام کار با اپلیکیشن ممکن هست انجام بده تست بشن و در مواقع لزوم پیام خطای مناسب و مهمتر از اون راهکار مناسب بهش ارایه بشه
Insight
Insight
بحث Exception Handling یا مدیریت استثناها یکی از مواردی ست که تفاوت بین یک Junior Developer و یک Senior Developer رو مشخص میکنه. یک برنامه ی ساده با الگوریتم مشخص به دو برنامه نویس مختلف داده میشه. اون شخصی که بتونه خطاهای احتمالی در هنگام اجرای برنامه رو بهتر مدیریت کنه، به تعبیری برنامه نویس بهتری هست چرا که درک مناسبتری از مهندسی نرم افزار داره.
شاید ساده ترین مثال هایی هم که از رخداد استثناها بیان میشه، تقسیم بر صفر و اندیس خارج از بازه باشه.
Sohrab
Sohrab
سلام
خسته نباشید
چرا این بحث و همچنین بحث مبانی برنامه نویسی فعال نیست