آموزش برنامه نویسی جاوا قسمت یازدهم
در جلسهی قبل ما با مفهوم حلقههای تکرار و نحوهی بکار گیری آنها و علت بکار گیریشان آشنا شدیم. در این جلسه از آموزش، ما با دو نوع دیگر از ساختارهای حلقه در جاوا آشنا میشویم. همچنین با انواع کامنت (Comment) گذاری در جاوا و علت بکارگیری آنها نیز آشنا میشویم. کامنتگذاری یکی از بخشهای مهم در برنامهنویسی است و باعث خوانایی برنامهی ما میشود. همچنین نگاهی میکنیم به قابلیتهای موجود در اکلیپس برای سرعت بخشیدن به برنامهنویسی و همچنین کاهش خطا.
کامنت گذاری در جاوا
در تمام زبانهای برنامهنویسی مفهومی به نام کامنتگذاری و یا توضیحات وجود دارد. در زبان جاوا هم این امکان وجود دارد تا برای قسمتهای مختلف برنامهی خود توضیحاتی را بنویسیم. این توضیحات از دید کامپایلر جاوا نادیده گرفته میشوند. یعنی نوشتن کامنتها در برنامه، هیچ تاثیری در اجرای برنامهی ما ندارد و کامپایلر جاوا بدون توجه به آنها، از آنها رد میشود. کاربرد کامنتگذاری به این صورت است که ما در مورد کدی که در برنامه نوشتهایم، توضیحاتی را مینویسیم تا اگر قرار شد کد ما را شخص دیگری مطالعه کند یا بعدا خودمان دوباره به کدی که نوشتهایم مراجعه کنیم، خواندن و فهم کدها، راحتتر باشد. زیرا ما در کامنتها توضیحاتی را در مورد کدی که نوشتهایم مینویسیم و این کار باعث میشود کاربرد آن کد معلوم شود. یعنی هدف ما از بکارگیری آن کد مشخص میشود. در جاوا سه نوع روش برای کامنتگذاری وجود دارد. به کد زیر توجه کنید:
همانطور که در کد بالا مشاهده می کنید، ما از هر سه نوع کامنتگذاری که در جاوا وجود دارد استفاده کردهایم.
اولین کامنت با دو علامت اسلش (Slash) که به شکل // است مشخص شده است. این نوع کامنتگذاری فقط برای یک خط است و از بعد از علامت // هرچیزی را که بنویسیم، تا آخر همان خط به صورت کامنت در میآید.
کامنت بعدی با علامتهای اسلش استار (Slash Star) */ شروع میشود و با استار اسلش (Star Slash) /* تمام میشود. در این نوع کامنت ما میتوانیم توضیحات خود را در چندین خط بنویسیم. همانطور هم که مشاهده میکنید هر خط با یک ستاره (*) شروع شده است.
آخرین کامنت که به آن جاوا داک (Javadoc) گفته میشود مخفف: Java Documentation است. این نوع کامنت فقط مخصوص زبان برنامهنویسی جاوا است. جاوا داک با علامتهای یک اسلش و دو ستاره (**/) شروع میشود و در آخر هم با یک ستاره و اسلش (/*) پایان میپذیرد. جملاتی که در جاوا داک نوشته میشود در حقیقت مستندات جاوا هستند و این امکان وجود دارد تا در پایان انجام پروژه با استفاده از ابزار javadoc که یکی از ابزارهای JDK است از روی این مستندات فایلهای HTML تولید کنیم. به کد زیر توجه کنید:
در کد بالا ما یک متد با نام run نوشتهایم و در بدنهی آن رشتهای را به خروجی استاندارد ارسال کردهایم (متد زیاد مهم نیست!). نکتهی مهم این است که ما قبل از متد run از جاوا داک استفاده کردهایم. بنابراین جاوا داک برای متد run تولید میشود. ابتدا یک توضیح کوتاهی نوشتهایم و بعد با استقاده از تگهای version و author، ورژن و نویسندهی برنامه را مشخص کردهایم. همانطور که در قسمت پایین کد مشاهده میکنید، اکلیپس به صورت خودکار جاوا داک را برای ما تولید کرده است و در یک پنجره با نام javadoc تمام چیزهایی که ما در کامنت نوشتهایم را نوشته است. (با دقت به جاوا داک نگاه کنید تا متوجهی جزئیات آن شوید). یکی دیگر از کاربردهای جاوا داک این است که ما میتوانیم به دید یک منبع آموزشی به جاوا داکها نگاه کنیم. زیرا توسعهدهندگان جاوا توضیحات مفصلی را هنگام تولید کلاسهای جاوا به صورت جاوا داک نوشتهاند و ما میتوانیم با مراجعه به آنها اطلاعاتی را کسب کنیم.
ساختار تکرار while
ما قبل از این با حلقهی for آشنا شدیم. همانطور که گفته شد شرط استفاده از حلقهی for دانستن تعداد دفعات حلقه است. ساختار دیگری برای تکرار در جاوا وجود دارد که به آن while گفته میشود. هنگامی که ما از این حلقه استفاده میکنیم، نمیدانیم که قرار است کی و چه زمانی حلقه تمام شود. به نوعی میتوان گفت که حلقهی while مانند یک نگهبان است. یعنی میتوان برای این نوع حلقهها یک نگهبانی را تصور کرد که به صورت دائم شرط حلقه را بررسی میکنند و تا زمانی که شرط حلقه دارای ارزش درستی باشد، این روند ادامه پیدا میکند (بدنهی حلقه اجرا میشود). حلقههایی که از مکانیسم نگهبان استفاده میکنند، برای توقف حلقه باید شرایطی را مهیا کرد که شرط حلقه در داخل خود حلقه نقض گردد. اگر شرط حلقه نقض نشود، با حلقهی بینهایت روبرو میشویم. به کد زیر دقت کنید:
همانطور که مشاهده میکنید نوشتن حلقهی while بسیار ساده است. یعنی ابتدا کلمهی کلیدی while را مینویسیم و بعد پرانتزهای باز و بسته در جلوی آن قرار میدهیم و در آخر هم بدنهی حلقه را مشخص میکنیم. شرط حلقهی ما در داخل پرانتزها قرار میگیرد و تا زمانی که شرط برقرار باشد، حلقه ادامه پیدا میکند. برنامهای که در بالا نوشته شده است را بهتر است با حلقهی for پیادهسازی کنیم. اما در اینجا صرفا برای آموزش ساختار حلقهی while از این مثال استفاده شده است.
ساختار تکرار do-while
ساختار do-while نیز، هم از نظر استفاده و هم از نظر کاربرد مشابه ساختار while است. تنها تفاوت آن در این است که شرط حلقه در انتهای آن بررسی میشود. بنابراین دستورات داخل بلاک یکبار قبل از چک شدن شرط حلقه اجرا میگردد. نکتهی بسیار مهمی که در ساختار do-while وجود دارد و معمولا افراد مبتدی فراموش میکنند این است که بعد از پرانتزهای باز و بسته که داخل آن شرط حلقه بررسی میشود، باید از علامت سمی کالن استفاده کرد. به کد زیر دقت کنید:
در کد بالا یکی دیگر از کاربردهای کامنتها دیده شده است. هنگامی که ما در برنامه کدی را نوشتهایم، اما به دلایلی نمیخواهیم فعلا آن کد اجرا شود و همچنین نمیخواهیم که آن کد را پاک کنیم، بنابراین آن کد را به صورت کامنت در میآوریم تا آن را نه کامپایلر اجرا کند و نه ما آن را پاک کنیم. در مثال بالا کدی که ما برای مثال حلقهی while نوشتهایم را با کمی تغییرات به صورت کامنت در آوردهایم تا اجرا نشود.
ساختار do-while را در کد بالا مشاهده میکنید. ابتدا از کلمهی کلیدی do استفاده میکنیم و بعد بدنهی حلقه را مشخص میکنیم و در آخر هم شرط حلقه را مینویسیم. برنامهای که ما در بالا نوشتهایم به این صورت است که اگر مقدار number کوچکتر از ۱۰ شد از حلقه خارج شود. این برنامه را اگر با while بنویسیم، برنامهی ما هیچ خروجیای ندارد. زیرا ابتدا شرط حلقه چک میشود و شرط هم برقرار نیست. بنابراین حتی یکبار هم بدنهی while اجرا نمیشود. اما اگر در ساختار do-while همان برنامه را بنویسید، برنامهی ما یک خروجی دارد. زیرا قبل از اینکه شرط حلقه بررسی شود، مقدار number چاپ شده است و بعد شرط حلقه بررسی شده است.
چه وقت بهتر است از کدام یک از این حلقهها استفاده کنیم؟
همانطور که قبلا هم نیز متذکر شدیم، اگر از قبل تعداد دفعات مورد نیاز اجرای حلقه را بدانیم، بهتر است از ساختار for برای ایجاد حلقه استفاده کنیم. گرچه میتوان از حلقهی while نیز برای ایجاد حلقهی تکرار با شمارنده استفاده کرد! اما از انجام این کار به شدت خودکاری کنید. زیرا از خوانایی برنامه میکاهد. اما هرگاه تعداد دفعات تکرار حلقه را ندانیم باید به دنبال یک نگهبان برای شرط حلقه باشیم تا بتوانیم از یکی از دو ساختار while یا do-while استفاده کنیم. همچنین هرگاه نیاز داشته باشیم دستورات داخل بلاک حلقه حداقل یکبار اجرا گردد، از ساختار do-while استفاده میکنیم، در غیر این صورت از ساختار while باید استفاده کرد.
استفاده از قابلیتهای اکلیپس
تمام محیطهای توسعهی برنامه نویسی قابلیتهایی را دارند که برنامهنویسی را سادهتر میکنند. منظور از ساده کردن برنامهنویسی این است که مثلا اگر در سینتکس برنامهی ما خطایی رخ داده باشد، محیطهای توسعه، آن خطا را مشخص میکنند و راهکاری را نیز برای رفع آن مشکل پیشنهاد میدهند. البته همیشه این راهکارها درست نیست. یا به عنوان مثالی دیگر قابلیت تکمیل کدها را دارند. این کار جدا از اینکه به نوشتن برنامه سرعت میدهد، باعث میشود که کدها به درستی نوشته شوند. همانطور که میدانید زبان جاوا یک زبان Case Sensitive است. یعنی به حروف بزرگ و کوچک حساس است. حالا فرض کنید برنامهنویس میخواهد از یک متد استفاده کند. بنابراین باید نام آن متد را دقیقا به همان صورتی که تعریف شده است بنویسد. ممکن است در نوشتن نام متد اشتباه کند. اما اگر از قابلیت تکمیل کد IDE استفاده کند هرگز این اشتباه رخ نمیدهد. به عنوان مثال فرض کنید که ما میخواهیم جملهی ;()System.out.println را بنویسیم و رشتهای را به خروجی استاندارد ارسال کنیم. ما میتوانیم فقط با نوشتن: sysout و سپس گرفتن دکمههای ترکیبی: Ctrl + Space جملهی فوق را کامل کنیم. به این کار Template گفته میشود. برای دیدن Templateها در اکلیپس ابتدا به منوی Window بروید و بعد آخرین گزینه یعنی: Preferences را انتخاب کنید. در پنجرهی باز شده، از قسمت بالا سمت چپ عبارت Template را سرچ کنید. (شکل زیر):
همانطور که در تصویر مشاهده میکنید، طبق شمارههای مشخص شده پیش بروید و در Template و بر روی sysout کلیک کنید. در قسمت Preview کد کامل آن نمایش داده میشود.
از دیگر قابلیتهای محیطهای توسعه این است که ما میتوانیم مشخص کنیم که برای هر خط از کد ما یک عددی را درنظر بگیرید. به عکس زیر دقت کنید:
همانطور که در عکس مشخص است، ابتدا بر روی نوار کناری کلیک راست کنید و از منوی باز شده گزینهی Show Line Numbers را انتخاب کنید (مستطیل قرمز رنگ). در ادامه اگر به کنار هر خط کد توجه کنید، شمارهای برای آن خط در نظر گرفته شده است (مستطیل آبی رنگ).
Perspective
یکی دیگر از قابلیتهای موجود در اکلیپس، انتخاب پرسپکتیو است. اجازه دهید پرسپکتیو را اینگونه برای شما توضیح دهم. همانطور که قبلا اشاره کردیم، محیطهای توسعه قابلیتهایی را برای برنامهنویسان مهیا میکنند. بخشی از این قابلیتها پنجرههایی است که ما برای مشاهدهی خروجی برنامهی خود به آنها مراجعه میکنیم. اما ما در هنگام تولید یک برنامه کارهای زیادی قرار است انجام دهیم. مثلا ما در هنگام نوشتن کدهای یک برنامه فقط به پنجرههای Console, Problems, Javadoc و … احتیاج داریم. اما فرض کنید که ما در هنگام نوشتن برنامه بخواهیم برنامه را دیباگ کنیم. بنابراین ما به پنجرههای دیگری از قبیل Variables, BreakPoints و … هم احتیاج داریم. حالا فرض کنید اگر ما بخواهیم تمام این پنجرهها را در یک صفحه قرار دهیم، چقدر صفحهی ما شلوغ میشود. بنابراین ما از قابلیتی به نام Perspective استفاده میکنیم. Perspective به این معنی است که ما پنجرههایی را که برای یک کار خاص (مثلا دیباگ کردن) احتیاج داریم را انتخاب میکنیم و آن را با یک نام مشخص Save میکنیم. بعدا هر موقع که خواستیم سریعا به پرسپکتیو دیباگ مراجعه میکنیم و به صورت حاضر و آماده از پنجرههای موجود استفاده میکنیم. به صورت پیشفرض پرسپکتیو اکلیپس (برای نسخهی JavaSE) جاوا (Java) است. برای دیدن Perspectiveهای دیگر به عکس زیر توجه کنید:
در تصویر بالا Perspective پیشفرض با یک فلش آبی رنگ مشخص شده است. برای دیدن پرسپکتیوهای دیگر همانطور که در عکس بالا با یک فلش قرمز رنگ مشخص شده است، بر روی دکمهی اشاره شده کلیک کنید. با تصویر زیر مواجه میشوید:
به عنوان مثال اولین پرسپکتیو یعنی Debug را انتخاب و بعد بر روی دکمهی OK کلیک کنید. بعد از OK کردن نمای صفحه عوض میشود و همچنین پرسپکتیو Debug نیز در کنار پرسپکتیو Java قرار میگیرد (تصویر زیر):
همانطور که مشاهده میکنید چینش پنجرههای اکلیپس عوض شد و بعضی از پنجرهها غیب شدند و بعضی دیگر جای آنها را گرفتند. حالا برای برگشتن به پرسپکتیو جاوا فقط کافی است بر روی پرسپکتیو جاوا کلیک کنید. همچنین میتوانید براساس سلیقهی خود چینش پنجرهها را تغییر دهید (راست کلیک بر روی پرسپکتیو و انتخاب گزینهی: …Customize) و با نام دلخواه آنها را Save کنید. برای این کار کافی است بر روی پرسپکتیو مورد نظر کلیک راست کنید و بعد گزینهی …Save As را انتخاب کنید. در پنجرهی باز شده یک نام برای پرسپکتیو خود انتخاب کنید و سپس پنجره را OK کنید. البته پیشنهاد میشود که تغییری در پرسپکتیوهای پیشفرض ایجاد نکنید. زیرا تمام آنها برای یک کار خاص طراحی شدهاند.
در جلسات آینده با نحوهی دیباگ کردن برنامه آشنا میشویم.
منبع: www.zoomit.ir