مدیریت استثناها در برنامهنویسی
آشنایی با استثناءها به ما اطمینان میدهد که خطاهای مرتبط را در هنگام وقوع شناسایی و مدیریت کنیم.
توضیح:۱- کدهای درج شده در این مقاله به زبان #C هستند.۲- این مقاله نیازمند آشنایی با مباحث برنامهنویسی است.۳- با وجود اینکه کدها برای یک ویندوزاپلکیشین فرضی نگارش شدهاند اما میتوان همین کدها را برای وباپلیکیشنها نیز به کار گرفت.۴- استثناء و مدیریت آن، مبحثی مفصل و بسیار کاربردی بوده و درک آن نیازمند چندین مقاله اختصاصی است. با این حال پس مطالعه این مقاله کوتاه میتوان به صورت ابتدایی به مدیریت استثناءها پرداخت.
در یک سناریوی فرضی، فرمی ساده حاوی یک لیبل (Label) برای نمایش پیام خطا، یک فیلد متنی (TextBox) و یک کلید (Botton) را در نظر بگیرید. این فرم قرار است سن کاربر گرفته و بررسی نماید. اگر سن کاربر کمتر از ۲۰ باشد به او اجازه ثبتنام داده میشود در غیر این صورت این امکان وجود نخواهد داشت.
از کاربر درخواست میشود سن خود را در فیلد وارد نموده و در ادامه روی کلید، کلیک کند. در رخداد کلیک مربوط به کلید، مقدار وارد شده در تکستباکس را در یک متغیر ریخته و با عدد ۲۰ مقایسه میکنیم.
از آنجا که مقدار ورودی در تکستباکس از نوع رشته (String) است. متغییری از نوع رشته تعریف کرده و مقدار ورودی را در آن میریزم. سپس با تبدیل آن به متغیری از نوع عدد صحیح (int)، آن را با عدد ۲۰ مقایسه میکنیم.
در حالت عمومی این سناریو بدون مشکل بوده و برنامه به راحتی اجرا میشود. اما اگر ورودی کاربر چیزی به غیر عدد باشد در مرحله تبدیل ورودی به عدد، خطایی رخ میدهد که برای نرمافزار قابل پیشبینی نبوده است.
رفتار پیشفرض در این حالت، بستهشدن (Terminate) نرمافزار است. در این مرحله پای استثناء به مسأله باز میشود. یعنی زمانی که در جریان اجرای یک برنامه، خطا یا اتفاقات غیرمنتظرهای مثل تبدیل یک مقدار غیرمجاز به عدد رخ دهد.
استثناء یک مکانیزم استاندارد برای گزارش وقوع خطاهای زمان اجرا (JIT) در برنامه است. بر همین اساس استفاده از استثناها به ما امکان میدهد که خطاهای رخ داده توسط اعضایی مانند متدهای سازنده را که نوع خاصی را برنمیگردانند نیز مدیریت کنیم.
برای مدیریت استثناءها از بلاککدهای try-catch استفاده میشود.
بدین صورت که کدهایی که ممکن است حاوی خطاهای پیشبینی نشده باشد را در بلاک try قرار داده و رفتار اپلکیشین در صورت وقوع خطا را در بلاک catch قرار میدهیم.
برای مثال اگر قرار باشد با استفاده از بلاککدهای try-catch مانع از وقوع خطای ذکر شده در سناریوی بالا شویم به صورت زیر عمل میکنیم:
//.کدها در رخداد کلیک، کلید قرار میگیرندbool DataControl = false;string UserInput = string.empty;int UserAge = 0;UserInput = txtUserInput.text;try {//.کدهایی که مستعد وقوع خطاهای استثناء هستند در این بلاک قرار میگیرندUserAge = int.parse(UserInput);DataControl = true;}catch {//.رفتار اپلیکیشن هنگام وقوع خطا در این بلاک قرار میگیردlblError.text = “.ورودی نامعتبر است. ورودی باید عدد باشد”;DataControl = false;}finally {if (DataControl) {if (UserAge < 20) {// .اگر سن کاربر کمتر از ۲۰ باشد این قطعه اجرا میشود}else{// .اگر سن کاربر بیشتر از از ۲۰ باشد این قطعه اجرا میشود}}}
در این قطعه کد، پس از کلیک بر روی کلید، مقدار تکستباکس (txtUserInput) در متغیری با نام UserInput ریخته میشود. سپس مقدار متغیر UserInput به کمک تابع parse به عدد صحیح تبدیل شده و در متغییری با نام UserAge قرار میگیرد.
اگر ورودی معتبر باشد، متغیر منطقی DataControl برابر true شده و کدهای بلاک finaly اجرا میشوند. اما اگر ورودی نامعتبر باشد، در هنگام تبدیل ورودی به عدد صحیح، خطایی رخ داده و با توجه به پیشبینی، نرمافزار کدهای بلاک catch را اجرا میکند. یعنی یک پیام خطا به کاربر نمایش داده و مقدار DataControl را برابر با false کرده و در ادامه بازهم کدهای بلاک finally اجرا میشوند.
توجه داشته باشید که کدهای بلاک finally در هر حالتی اجرا خواهند شد. در بلاک finally، با توجه به مقدار DataControl و مقدار UserAge کدها اجرا خواهند شد.
به کمک همین قطعه کد، خطاهای احتمالی ناشی از ورود داده غیرمعتبر به صورت ابتدایی مدیریت شده و پیام خطای مناسب نیز به کاربر نمایش داده میشود.
هنگام استفاده از این بلاککدهای مدیریت استثناء بهتر است چند نکته را مدنظر قرار دهید:
۱- جزئیات کد و متن خطا را به صورت خروجی برنگردانید.۲- اگر بخشی از برنامه قادر نیست وظیفه خود را انجام دهد از استثناء فقط برای گزارش وقوع خطا استفاده کنید.۳- اگر اجرای نرمافزار با ورودی غیرمعتبر سطح امنیتی اپلیکیشن را کاهش میدهد بهتر است به جای فراخوانی استثناء اجرای نرمافزار را متوقف کنید.۴- پیام خطا را صریح و واضح درج نمایید تا برای کاربر مشخص شود علت وقوع خطا چه چیزی بوده است.۵- ترجیحاً از علامت سؤال (؟) یا علامت تعجب (!) در نمایش پیام استفاده نکنید.
امیدواریم این مبحث مورد توجه شما قرار گرفته باشد. تجربه کاربری خود را با ما نیز در میان بگذارید.
بعضی از کاربران ویندوز بهدنیال روش های خاموش كردن آنتي ويروس ویندوز ۱۰ هستند، زیرا این سیستم امنیتی بومی گاهی برای آنها دستوپاگیر میشود.
اگر هنوز شناسنامهی قدیمیتان با جلد قرمز و عکس نوجوانی را عوض نکردهاید، این راهنما به شما کمک میکند تا در مدت کوتاه شناسنامه جدید بگیرید.
ساخت اپل آیدی یکی از اقدامات اولیه پس از خرید آیفون است، در ادامه آموزش رایگان گام به گام ساخت اپل آیدی را مشاهده میکنید.
برای خرید تبلت مناسب، نیازی نیست حتماً پول زیادی پرداخت کنید. در راهنمای خرید پیش رو، بهترین تبلتهای بازار ایران را معرفی میکنیم.
تنوع زیاد هارد اکسترنال در بازار، انتخاب مدل مناسب را دشوار میکند. در این مقاله با بهترین هاردهای اکسترنال موجود در بازار ایران آشنا میشویم.
از تغییر قیمتها تا محاسبهی تخفیف، درصدگیری نقش مهمی در زندگی روزمره دارد. در این مطلب با روشهای دقیق محاسبه درصد آشنا میشوید.
از سرفیس پرو گرفته تا لپتاپ هیبریدی اچپی، در مقالهی پیش رو بهترین تبلتها با سیستمعامل ویندوز را به شما معرفی میکنیم.