بررسی انواع ارورها در زبان برنامه نویسی جاوا
پس از آشنایی با مفاهیم شیئ گرایی در برنامه نویسی، مسئله ای که می تواند برای برنامه نویسان مبتدی مفید واقع شود را مطرح خواهیم که عبارت است از Error هایی که ما در برنامه نویسی با آن ها مواجه خواهیم شد.
ارورها در زبان برنامه نویسی جاوا به چند دسته تقسیم می شوند: گروه اول ارورهایی هستند که از نوع Compile-time Error می باشند. به طور مثال دستور ;()system.out.println در مقایسه با ;()System.out.println اشتباه است چرا که حرف اول واژه system به صورت کوچک نوشته شده است و همین مسئله موجب می گردد که برنامه کامپایل نشود. خبر امیدوار کننده اینجا است که این گروه از مشکلات توسط نرم افزار اکلیپس که برنامه خود را با آن می نویسیم تشخیص داده شده و به ما اخطار داده می شوند و به سادگی می توان آن را رفع کرد. برای روشن شدن این مطلب به ذکر چند مثال تصویری به همراه توضیحات خواهیم پرداخت.
همان طور که در آموزش های قبلی فرا گرفتیم، پروژه ای در محیط برنامه نویسی جاوا ایجاد کرده و یک کلاس با نام CompileTimeErrors یا هر نام دیگری در آن ایجاد می کنیم (فقط به خاطر داشته باشیم که نام کلاس ما با نام فایل java. که می سازیم دقیقاً یکی باشد که در غیر این صورت برنامه ما با مشکل مواجه خواهد شد.) پس از ایجاد پروژه، می بایست کدی مشابه کد زیر داشته باشیم:
public class CompileTimeErrors { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } }
در ادامه می خواهیم جمله This is a Compile time error را داخل کنسول نمایش دهیم پس می بایست کد خود را به شکل زیر ویرایش نماییم (لازم به ذکر است که کامنت های کد که هیچ تاثیری در نحوه ی اجرای برنامه ما ندارند را حذف می کنیم):
public class CompileTimeErrors { public static void main(String[] args) { System.out.println("This is a Compile time error"); } }
در واقع کد فوق یک برنامه کامل و صحیح جاوا است که بدون هیچ مشکلی اجرا خواهد شد. در این جا ما قصد داریم تا عمداً تغییری در کد ایجاد کنیم تا کامپایلر از ما ایراد بگیرد. به همین منظور واژه out که می بایست حتماً با حروف کوچک نوشته شود را به صورت OUT می نویسیم. به محض این که ما واژه ی out را به OUT تغییر دهیم و برنامه را مجدد کامپایل کنیم، با خروجی زیر مواجه خواهیم شد:
ما در تصویر فوق از روی دو مورد می توانیم متوجه شویم که برنامه ما دارای ارور است. محیط برنامه نویسی اکلیپس دور واژه ی مشکل زا که در اینجا OUT است یک نقطه چین قرار داده است. از سوی دیگر در کنار نام فایل CompileTimeError.java علامت هشداری مشاهده می شود که نشانگر ایرادی در برنامه است. حال با قرار دادن نشانگر موس خود روی واژه OUT اکلیپس پیامی را به ما نشان می دهد که به شکل زیر است:
این یکی از بخش های لذت بخش کار کردن با نرم افزار اکلیپس است. این محیط برنامه نویسی قدرتمند مشکل را پیدا کرده و در جهت رفع آن تعدادی پیشنهاد می دهد (در اینجا صرفاً یک پیشنهاد بیشتر به ما نمی دهد چرا که مشکل خیلی پیچیده نیست!) چنانچه به خط آبی رنگ توجه کنیم، می بینیم که به ما پیشنهاد می شود که واژه OUT را به out تغییر دهیم که با این کار مشکل ما رفع خواهد شد. لازم به ذکر است که مثال فوق به منزله یکی از ساده ترین انواع ارورها در زبان برنامه نویسی جاوا است. در واقع یکسری از ارورها هستند که تا حدودی پیچیده تر اند و اکلیپس برای رفع مشکل، بیش از یک مورد به ما پیشنهاد می دهد که در چنین حالتی کار ما به عنوان برنامه نویس این است که تک تک پیشنهادات را مورد بررسی قرار داده و سپس تغییر مورد نیاز را اعمال کنیم.
نوع دیگر از ارورها تحت عنوان Unchecked Runtime Exception شناخته می شوند. در این صورت ما هیچ گونه Compile-time Error نداریم اما برنامه هم به طور کامل اجرا نمی شود. در واقع برنامه ای که ما نوشته ایم کاری را از جاوا می خواهد انجام دهد که جاوا از انجام آن ناتوان است. به طور مثال فرض کنیم که ما یک متغییر از جنس int داریم که مقدار اختصاص داده شده به آن ۱,۰۰۰,۰۰۰ است. در حین نوشتن برنامه ما با هیچ گونه مشکلی مواجه نخواهیم شد اما به محض اینکه اقدام به کامپایل کردن برنامه می کنیم، ارور دریافت می کنیم. در مثال فوق اشکال کار در اینجا است که ما مابین ارقام یک کاما قرار داده ایم از این رو جاوا قادر به کامپایل کردن برنامه نخواهد بود. به منظور رفع این مشکل می بایست عدد فوق را به ۱۰۰۰۰۰۰ تبدیل کنیم. در حقیقت نرم افزار اکلیپس از درک اینکه این مسئله می تواند در حین اجرا مشکل زا باشد عاجز است (در نت بینز اجازه تعریف همچین مقداری به کاربر داده نمی شود و خطا می دهد.)
برای روشن تر شدن این مسئله مثالی از دنیای واقعی می زنیم. فرض کنیم که شما از شخصی آدرس می پرسید. آن شخص به شما می گوید که مستقیم بروید تا به یک چهار راه برسید سپس به سمت راست بروید و رو به روی شما یک سینما قرار دارد. حال شما همان طور که آن شخص گفت مسیر را طی می کنید. مستقیم می روید. به چهار راه که رسیدید به سمت راست می روید. به رو به رو که نگاه می کنید به جای یک سینما یک دیوار سیمانی رو به روی شما قرار دارد! به عبارت دیگر شما از اول نمی دانستید که آدرسی که به شما داده شده است اشتباه است. زمانی که اینگونه ارورها اتفاق می افتند نیز قضیه به همین شکل است. از بدو امر جاوا نمی داند که در حین اجرای برنامه در وسط کار مشکلی قرار است اتفاق افتد از همین رو نمی تواند پیش بینی کند که برنامه در حین کامپایل شدن با مشکل مواجه خواهد شد.
دسته دیگری از ارورها از نوع Logical یا منطقی هستند. در چنین مواقعی نرم افزار اکلیپس هیچ گونه خطایی را نشان نخواهد داد و برنامه هم به طور کامل اجرا خواهد شد اما پاسخی که نرم افزار قرار بود به ما بدهد صحیح نیست. فرض کنیم در مثال فوق شخصی که به ما آدرس می دهد به جای این که به ما بگوید به سمت راست برویم بگوید که به سمت چپ برویم. این دسته از ارورها به منزله چالش بر انگیزترین ارورهای موجود در برنامه نویسی می باشند به طوری که رفع کردن آن ها هم ممکن است با دشواری زیادی همراه باشد (شاید مجبور باشید هفته ها وقت صرف کنید تا مشکل را بیابید!) نکته ای که بایستی مد نظر قرار داده شود این است که بسیاری از این دست از ارورها در بیشتر مواقع اصلاً مورد توجه قرار نمی گیرند و در آینده مشکلات زیادی را برای برنامه نویس به بار خواهند آورد.
دسته آخر از ارورها که بهتر است نام آن ها را ارور نگذاریم بلکه آن ها را Warning یا هشدار بنامیم تحت عنوان Compile-time Warning شناخته می شوند. به طور کلی این دسته از هشدارها به مهمی ارورها نمی باشند. در واقع زمانی که محیط برنامه نویسی اکلیپس شاهد مسئله مشکوکی باشد، یک آیکون زرد رنگ با علامت تعجب مقابل خطی که به آن مشکوک است نمایش می دهد. به مثال زیر توجه فرمایید:
در مثال فوق، ما یک متغییر از جنس عدد صحیح یا int ایجاد کرده ایم که نام آن test است و مقداری معادل با ۱۰۰ هم برای آن در نظر گرفته ایم. در مقابل خطی که متغییر در آن قرار دارد یک علامت زرد رنگ با یک علامت تعجب قرار دارد. به عبارت دیگر، این یک هشدار از طرف نرم افزار اکلیپس است که می خواهد به ما بگوید که این متغیر در هیچ کجای برنامه مورد استفاده قرار نگرفته است و دیگر این که آیا مطمئن هستید که می خواهید این متغیر را در سورس کد خود نگه دارید. در حقیقت، هر موقع که ما با چنین هشدارهایی مواجه شویم می توانیم نشانگر موس خود را روی آن علامت زرد رنگ نگه داشته و پیشنهادی که اکلیپس به ما می دهد را مطالعه کنیم. به تصویر زیر توجه کنید:
نوشته ای که در قسمت زرد رنگ دیده می شود حاکی از آن است که مقدار متغیری تحت عنوان test در هیچ کجای برنامه مورد استفاده قرار نگرفته است.
آخرین دیدگاهها