- جاوا اسکریپت
- زمان 4 دقیقه
در برنامه نویسی و طراحی صفحات وب ، گاهی اوقات ممکن است خطاهایی رخ دهد. این خطاها می تواند دلایل مختلفی داشته باشد ، از قبیل:
- اشتباه تایپی در متن دستورات صفحه از سوی طراح صفحه
- واردنمودن اطلاعات اشتباه یا نادرست از سوی کاربر
- انواع خطاهای ممکن زمان اجرای مرورگر
اگر کاربر که در حال مشاهده یک صفحه است ، در هنگام کار با خطا مواجه شود و عملا راهی برای رفع آن اشکال برایش وجود نداشته باشد ، مطمًننا از ادامه مشاهده و کار با صفحه صرف نظر خواهد کرد . این وظیفه برنامه نویس است که با برنامه ریزی صحیح ، خطاهای احتمالی را پیدا کرده و راه حل های مناسب را برای آنها طراحی کند.
از ساختار کنترلی try … catch در جاوا اسکریپت ، برای پیدا کردن خطاها و error های احتمالی و تعیین اقدامات اصلاحی در صورت بروز خطا ، استفاده می شود.
این ساختار از ۲ بخش try و catch تشکیل شده است . کد اصلی برنامه که می خواهیم اجرا شود و احتمال می دهیم دارای خطا باشد ، را در قسمت try قرار داده و اقدامات اصلاحی را که می خواهیم در صورت بروز خطا انجام شود ، را در قسمت catch می گذاریم.
برنامه در هنگام رسیدن به ساختار ، دستورات قسمت try را انجام می دهد و در صورت مواجه با خطا در دستورات ، بخش catch را اجرا خواهد کرد.
نکته مهم: در صورت عدم برخورد با خطا ، دستورات قسمت catch به هیچ وجه اجرا نخواهد شد.
نکته مهم ۲: در قسمت catch ، می توان در پرانتز مقابل واژه کلیدی catch ، یک عبارت یا متغیر تعریف کرد ، که این متغیر خصوصیات error به وجود آمده را در خود نگهداری کرد . یکی از این خواص ، شرح یا description خطا است ، که می توان به شکلی که در مثال ۲ نشان داده شده است ، به شرح خطا دسترسی داشته و آنرا به کاربر اطلاع داد.
شکل کلی تعریف یک ساختار try … catch به صورت زیر است:
try
{
دستورات مورد نظر برای اجرا که احتمال خطا دارد
}
catch ( نام یک متغیر )
{
اقدامات اصلاحی مورد نظر در صورت وقوع خطا
}
مثال ۱: در مثال زیر ، یک تابع به نام show_error قرار داده شده است . این تابع توسط دکمه فرمان click me فراخوانی شده و قصد دارد تا یک پیغام خوش آمد به کاربر اعلام کند . اما در متن دستور یک اشتباه تایپی وجود دارد و آن اینکه به جای عبارت documnet.write ، نوشته شده است document.wriet ، به همین دلیل پیغام خروجی چاپ نشده و در صفحه error رخ می دهد . اگر دقت کنید در نوار پایین مرورگر ( Status Bar ) علامت Error on page قرار گرفته است . برای مشاهده error ، بر روی آیکون خطا کلیک کنید . در اینجا به دلیل عدم پیش بینی خطا هیچ واکنشی از سوی مرورگر انجام نمی شود:
< script type="text/javascript" > function show_error() { document.wriet ( "Welcome User!" ) ; } < /script > < input type="button" id="Button1" value="click me !" onclick="show_error()" />
مثال ۱: در مثال زیر ، تابع show_error2 قرار داده شده است . این تابع نیز همانند تابع قبلی می خواهد یک پیام خوش آمد به کاربر اعلام کند . این تابع نیز دارای اشتباه تایپی در دستور document.write است ، با این تفاوت که با ساختار try … catch قرار داده شده ، تعیین شده است در صورت بروز خطا یک پیام هشدار به کاربر اعلام شود . توسط متغیر err که در پرانتز مقابل واژه کلیدی catch تعریف شده است ، متن پیام error در خاصیت description ذخیره شده و سپس به کاربر اعلام می شود . به کد مثال دقت کنید:
< script type="text/javascript" > function show_error2 ( ) { try { document.wriet ( "Welcome User!" ) ; } catch ( err ) { alert ( "There was an error on this page . \n\n" + "Error Description : " + err.description +"\n\nClick Ok for continue" ) ; } } < /script > < input type="button" id="btnclick2" value="click me ! to see error report" onclick="show_error( )" />
دستور throw :
توسط دستور throw در جاوا اسکریپت می توان یک خطایابی کامل تر را انجام داد . با استفاده از این دستور به همراه ساختار try … catch ، می توان روند اجرای برنامه و بروز خطا را کاملا تحت کنترل داشت و یک پیغام خطا دقیق طراحی کرد.
نکته: دستور throw به تنهایی کاربردی نداشته و باید آنرا با ساختار دستوری try … catch به کار برد.
در مثال زیر سعی شده است ، تا چگونگی استفاده از یک دستور throw را در قالب ساختار try … catch توضیح داد.
مثال: در مثال زیر یک اسکریپت ساده برای دریافت ورودی از کاربر طراحی شده است . تابع Enter_Num که توسط دکمه فرمان Enter Number فراخوانی می شود ، در ابتدا یک کادر متن برای دریافت ورودی از کاربر ، نمایش می دهد . مقدار دریافتی از کاربر در متغیر Num ذخیره می شود . سپس در یک ساختار try … catch ، مقدار دریافتی از کاربر بررسی می شود.
در حالت اول ، چنانچه کاربر مقداری را در کادر وارد نکرده و آنرا خالی ارسال کرده باشد ، برنامه خطای ۱ را شناسایی و یک پیام هشدار مبنی بر وارد کردن عدد نمایش داده و سپس مجددا تابع Enter_Num را برای دریافت مقدار صحیح اجرا می کند . در حالت دوم اگر کاربر عددی بزرگتر از ۱۰۰ را وارد کرده باشد ، برنامه خطای دوم را شناسایی کرده و یک پیغام هشدار مبنی بر بزرگ بودن عدد وارده را نمایش داده و مجددا تابع Enter_Num را اجرا می کند . به کد مثال و نحوه استفاده از دستور throw دقت کنید:
< script type="text/javascript" > function Enter_Num ( ) { var Num = prompt ( "Enter a number please : " , "" ) ; try { if ( !Num ) throw "Error1" else if ( Num > 100 ) throw "Error2" } catch ( er ) { if ( er == "Error1" ) { alert ( "Plese enter a number !" ) ; Enter_Num ( ) ; } if ( er == "Error2" ) { alert ( "Number too big . Enter a smaller number !" ) ; Enter_Num( ) ; } } } < /script > < input type="button" id="BtnEnter" value="Enter Number " onclick="Enter_Num( )" />
دیدگاه خود را بیان کنید