آموزش برنامه نویسی جاوا قسمت نهم
فقط و فقط خواستن مهم است. زیرا توانستن همچون سایهای به دنبال خواستن همیشه میآید. برنامه نویسی هم مانند هر تخصص و علم دیگری سختیهایی دارد و برای گذشتن از این سختیها و موفق شدن باید خواست. خواستن در برنامه نویسی به معنی تمرین کردن زیاد است و فقط و فقط با تمرین کردن است که میتوان به یک برنامه نویس حرفهای تبدیل شد.
تقدم عملگرهای حسابی
قواعدی وجود دارد که تقدم عملگرهای حسابی را در عبارات محاسباتی در غیاب پرانتز مشخص میکند. این قواعد به قواعد تقدم عملگرهای حسابی موسوم هستند. به مثال زیر توجه کنید:
A + B * C
به ازای مقادیر C=2, B=3, A=5، اگر بخواهیم بدون دخالت تقدم عملگرها عبارت را محاسبه کنیم، جواب ۱۶ خواهد بود. اما این جواب درست نیست. زیرا در ریاضی عملگر ضرب که در جاوا با علامت ستاره (*) مشخص میشود، نسبت به جمع و تفریق سطح تقدم بالاتری دارد. بنابراین باید ابتدا ضرب انجام شود و سپس جمع و تفریق. بنابراین جواب عبارت فوق میشود ۱۱. یعنی ابتدا B در C ضرب و سپس با A جمع میشود.
نکته: در برنامه نویسی از دو مفهوم عملگر و عملوند بسیار استفاده میشود. در ریاضیات، یک عملگر تابعی است که بر تابعی دیگر اعمال میشود. یک عملگر را یک عمل ریاضی گویند. مانند عمل جمع، ضرب، تقسیم و … . همچنین واژهی دیگری است با نام عملوند. یک عملوند، هدف یک عملیات ریاضی است. در مثال فوق حروفهای A, B, C هر کدام یک عملوند هستند.
در زیر فهرست کامل سطوح تقدم عملگرهای حسابی نشان داده شده است.
همانطور که در جدول بالا نشان داده شده است، عملگر توان بالاترین سطح تقدم را دارد. توان در زبان جاوا با استفاده از متد ()pow حساب میشود. بعد عملگرهای ضرب، تقسیم و منفی کردن یکتایی است. تمام این سه عملگر سطح تقدم یکسانی دارند. مثلا در عبارتی به صورت A + B + C با آنکه، دو عملگر جمع به کار رفته در آن، دارای تقدم یکسانی هستند. ولی علمگر سمت چپ دارای تقدم بالاتری است. چرا که در هنگام پویش (پردازش) عبارت، عملگر سمت چپ زودتر خوانده میشود. به عبارت دیگر دو عملگر با سطح تقدم یکسان، دارای تقدم مکانی نسبت به هم هستند.
به عنوان تمرین در مورد علامت منها تحقیق کنید. علامت منها سه کاربرد دارد.
با توجه به توضیحات فوق، ماشین (کامپیوتر) هنگام محاسبهی عبارتهای محاسباتی از چپ به راست شروع به خواندن عملگرها میکند. اگر در عبارت عملگرهایی بود که تقدم آنها با هم فرق داشت، خب مسلما کامپیوتر ابتدا عملگرهایی که سطح تقدم بالاتری دارند را حساب میکند. اما اگر همهی عملگرها سطح تقدم یکسانی داشته باشند، از چپ به راست خوانده و محاسبه میشود. اما یک نکتهی مهم در این بین وجود دارد که با قراردادهای معمولی در ریاضیات مطابقت ندارد. اگر بخواهیم با توجه به جدول بالا عبارت: A^B^C (عملگر ^ نشانگر توان است) را حساب کنیم، کامپیوتر از سمت چپ ابتدا A را به توان B و سپس پاسخ را به توان C میرساند. اما در ریاضی قرارداد است که عبارت فوق به صورت:
A^(B^C)
حساب شود. یعنی ابتدا B به توان C برسد و بعد A به توان جواب آن دو. همانطور که مشاهده کردید ما برای هندل کردن این قضیه از پرانتزها استفاده کردیم. استفاده از پرانتزها باعث میشود که کامپیوتر عبارت را طوری که ما میخواهیم حساب کند. مثلا در عبارت مقابل: A + B *C، اگر بخواهیم ابتدا A با B جمع شود و سپس در C ضرب شود، باید از پرانتزها استفاده کنیم. به صورت زیر:
(A +B) * C
به عنوان حرف آخر در این بخش، همیشه در برنامه نویسی از پرانتزها در عبارتهای جبری خود استفاده کنید. این کار هم باعث خوانایی کد میشود و هم اینکه احتمال خطا را کاهش میدهد.
به عنوان تمرین عبارت زیر را در نظر بگیرید و آن را حل کنید:
-A*L-G*O^R/I+T/H*M
M H T I R O G L A
۷ ۲ ۶ ۴ ۳ ۲ ۸ ۶ ۵
جواب تمرین فوق ۲۵- میشود.
ساختارهای کنترلی
در تمام زبانهای برنامه نویسی ساختارهایی برای کنترل اجرای برنامه وجود دارد. یعنی با توجه به شرایطی که در برنامه اتفاق میافتد، یکسری دستورات اجرا میشوند یا یکسری از دستورات اجرا نمیشوند. در زبانهای قدیمی مانند سی پلاس پلاس دستوری هست با نام goto. که کار این دستور این است که اجرای برنامه را به خطوط قبلی برنامه بر میگرداند. اما این دستور قوانین برنامه نویسی ساخت یافته را زیر سوال میبرد. زیرا در برنامه نویسی ساخت یافته روال اجرای برنامه به صورت نزولی است. یعنی کدهای برنامه باید از بالا به پایین به ترتیب اجرا شوند و جز توسط حلقههای تکرار، برنامه نباید به عقب برگردد. بنابراین این دستور توسط برنامه نویسان مورد استفاده قرار نمیگیرد. در زبان جاوا این دستور به عنوان یک keyword رزرو شده است اما کاربردی ندارد. به نظر، توسعه دهندگان جاوا با این کار خواستهاند بگویند که ما از وجود چنین دستوری بیاطلاع نیستیم. برای همین هم این دستور جزو کلمات کلیدی جاوا حساب میشود.
در جاوا یک ساختار کنترلی وجود دارد که شکل آن به صورت زیر است:
if(condition) { //operations-1 }else { //operations-2 }
همانطور که مشاهده میکنید دستوری بسیار ساده اما در عین حال کاربردی است. ابتدا شرط داخل پرانتز مقابل if بررسی میشود. اگر شرط درست یا برقرار بود operations-1 اجرا میشود و دیگر operations-2 اجرا نمیشود یا برعکس. ممکن است شرط برقرار نباشد، بنابراین operations-2 اجرا میشود.
حالا میخواهیم یک برنامهی ساده بنویسیم. دو عدد را با هم مقایسه میکنیم. برنامه به این صورت است که اگر عدد اول از عدد دوم بزرگتر بود یک پیغام. اگر کوچکتر بود یک پیغام و اگر هم مساوی بودن، یک پیغام دیگر چاپ میشود. به کد زیر دقت کنید:
همانطور که در کد مشاهده میکنید ما دو عدد صحیح تعریف کردهایم که به ترتیب مقدار ۱۰ و ۳۵ را دارند. ابتدا در پرانتزهای مقابل دستور if بررسی میشود که اگر عدد اول بزرگتر از عدد دوم است، یک پیغام چاپ شود. اگر شرط برقرار باشد ادامهی کد اجرا نمیشود. اما اگر برقرار نباشد به سراغ بررسی شرط بعدی میرود. شرط بعدی که به صورت else if مشخص شده، بررسی میکند که اگر دو عدد با هم مساوی بودند پیغام دیگری چاپ شود و در آخر هم اگر هیچکدام از شروط فوق برقرار نبود، یعنی عدد اول نه بزرگتر از عدد دوم و نه مساوی با آن بود، بنابراین یک چیز دیگر بیشتر باقی نمانده که آن هم کوچکتر بودن عدد اول است.
در جدول زیر فهرستی از عملگرهای جاوا آمده است:
به جدول بالا با دقت نگاه کنید و کاربرد هرکدام را یاد بگیرید. نکتهای که برنامه نویسان تازه وارد ممکن است اشتباه کنند، عملگر انتساب (=) و عملگر برابری (==) است. در ریاضیات برای نشان دادن اینکه یک عدد با یک عدد دیگر برابر است از یک علامت مساوی (=) استفاده میکنند. ولی در برنامه نویسی باید برای این کار از دو علامت مساوی (==) استفاده کنید. اشتباه استفاده کردن از این علامتها بروز خطاهای منطقی را در برنامه افزایش میدهد.
واسط کاربری
به عنوان آخرین مطلب در این آموزش، میخواهیم برنامهای بنویسیم که خروجی آن دیگر در کنسول چاپ نشود. بلکه توسط کادرهای گفتگو در جاوا و به صورت گرافیکی نمایش داده شود. برای اینکار باید از کلاسی تحت عنوان JOptionPane استفاده کنیم.
به کد زیر دقت کنید:
در خط اول برنامه جملهی import javax.swing.JOptionPane نوشته شده است. (در فصل شیگرایی که با مفهوم پکیج آشنا شدید به خوبی این مطلب را درک میکنید). اما این را بدانید که وقتی میخواهیم در کلاسی که ساختهایم از کلاسی استفاده کنیم که آن کلاس در یک پکیج دیگر قرار دارد، باید آن کلاس را اصطلاحا import کنیم. با import کردن، ما مسیر کلاس را مشخص میکنیم. یعنی در این برنامه میخواهیم از کلاسی استفاده کنیم که نام آن JOptionPane است و این کلاس در پکیجی قرار دارد که نام آن پکیج javax.swing است. نکتهای که باید به آن توجه کنید این است که اصلا خودتان را درگیر حفظ کردن نام پکیجها نکنید و اصلا هم نیازی نیست که شما این کلاسها را import کنید. زیرا اگر از قابلیتهای تکمیل خودکار IDE ها استفاده کنید، خود IDE به صورت خودکار کلاس مورد نظر را import میکند. برای استفاده از قابلیتهای تکمیل خودکار باید ابتدا چند حرف ابتدایی نام کلاس را بنویسید و سپس دکمههای ترکیبی: CTRL + SPACE را نگه دارید. با این کار هم نام کلاس کامل میشود و هم کلاس مربوطه وارد میشود. حالا به سراغ بررسی برنامه برویم:
در متد اصلی (main) ما ابتدا نام کلاس JOptionPane را مینویسیم. سپس از متدی با نام showMessageDialog استفاده میکنیم. این متد چهار پارامتر دریافت میکند. پارامتر اول که مقدار آن null است، مشخص میکند هنگامی که برنامه اجرا شد و کادر گفتگو نمایش داده شد، این کادر گفتگو دقیقا در وسط صفحهی نمایش، نشان داده شود. (در مباحث گرافیک در جاوا میتوان تعیین کرد که این گونه پیغامها در یک فریم خاصی نمایش داده شود که در حال حاضر خارج از بحث است و به آن پرداخته نمیشود). در پارامتر دوم متنی که میخواهیم نمایش داده شود را مینویسیم که باید حتما بین دابل کوتیشن قرار بگیرد. پارامتر سوم title یا عنوان کادر گفتگو را مشخص میکند. به عنوان مثال اگر قرار است پیغامی چاپ شود و آن پیغام بیانگر یک ارور باشد، در title آن میتوان نوشت: Error. پارامتر آخر هم نوع پیغام را مشخص میکند که این پیغام از نوع اطلاعات است.
برای آخرین پارامتر ما میتوانیم پنج نوع دیالوگ مشخص کنیم که در زیر آمده است:
JOptionPane.ERROR_MESSAGE
JOptionPane.INFORMATION_MESSAGE
JOptionPane.WARNING_MESSAGE
JOptionPane.QUESTION_MESSAGE
JOptionPane.PLAIN_MESSAGE
اگر برنامهی فوق را اجرا کنیم با خروجی زیر مواجه میشویم:
همانطور که مشاهده میکنید خروجی برنامهی ما به صورت گرافیکی نمایش داده شده است. حالا اگر یکی از انواع دیالوگهایی که در فوق گفته شد را مشخص کنیم، لوگویی که در عکس با یک بیضی سبز رنگ مشخص شده است تغییر میکند، به عنوان تمرین تمام انواع دیالوگهای فوق را بنویسید و خروجی آن را مشاهده کنید.
منبع: www.zoomit.ir