نماد سایت تیک۴

ساختار دستوری try … catch جاوا اسکریپت

در برنامه نویسی و طراحی صفحات وب ، گاهی اوقات ممکن است خطاهایی رخ دهد. این خطاها می تواند دلایل مختلفی داشته باشد ، از قبیل:

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

از ساختار کنترلی 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( )" />
خروج از نسخه موبایل