آموزش برنامه نویسی جاوا
آموزش برنامه نویسی جاوا (بخش ششم: عبارات شرطی در جاوا)
در بخش قبلی در مورد حلقه ها صحبت کردیم. دیدیم که حلقه ها قادر هستند یک بخش از کد را به دفعات مشخصی اجرا کنند.
در این بخش در مورد عبارات شرطی در جاوا صحبت می کنیم. شرط ها در برنامه نویسی به گونه ای هستند که اجازه ی اجرای یک قسمت از کد را می دهند.
در واقع می توان با شرط ها کنترل اجرای قسمتی از کد را به گونه ای به عهده گرفت که اگر بخواهیم آن قسمت اجرا نشود. و اگر بخواهیم اجرا شود. چگونگی انجام این روند، در ادامه توضیح داده می شود. زیرا ما چندین نوع شرط داریم.
عبارت شرطی IF
یک عبارت شرطی if از یک شرط و یک یا چند عبارت اجرایی تشکیل شده است. شکل نوشتاری کلی آن مانند کد زیر است.
if(Boolean_expression) { //Statements will execute if the Boolean expression is true }
عبارتی که در بالا چک می شود ( Boolean expression ) ، اگر درست باشد (true) کد داخل Block اجرا می شود و در غیر این صورت این کد اجرا نخواهد شد و برنامه از قسمت if می گذرد و به سراغ کدهای بعدی می رود.
عبارت شرطی if یکی از پرکاربردترین دستورات در زبانهای برنامه نویسی است و کمک بسیاری به برنامه نویسان برای نوشتن اپلیکیشن هایشان می کند.
برای درک بهتر if به مثال زیر توجه فرمایید:
public class Main { public static void main(String[] args) { int Temp= 32; if(Temp>30) System.out.print("hot"); } }
این کد، خروجی زیر را چاپ می کند:
hot
در کد بالا چون عبارت Temp>30 درست (true) است، پس کد داخل if اجرا می شود. دقت نمایید که از آنجاییکه کد بعد از if یک خط است می توان از بلاک استفاده ننمود.
عبارت شرطی if-else
در دستور if-else اگر عبارت boolean expression درست باشد، کد داخل if و در غیر این صورت کد داخل else اجرا می شود.
شکل نوشتاری کد دستور if-else به صورت زیر است:
if(Boolean_expression){ //Executes when the Boolean expression is true }else{ //Executes when the Boolean expression is false }
در کد مثال بالا می توانیم بگوییم که اگر Temp>30 نباشد، کدهای دیگری اجرا شوند.
public class Main { public static void main(String[] args) { int Temp= 16; if(Temp>30) System.out.print("hot"); else System.out.print("cold"); } }
خروجی کد بالا به صورت زیر است:
cold
در کد بالا از آنجاییکه دستور Temp>30 عبارت false را بر میگرداند پس دستور if اجرا نمی شود و دستورات else اجرا می شوند.
نکته:
می توان از دستورات if-else به صورت چندتایی استفاده نمود. بدین صورت که در داخل هر if-else شرطی مخصوص به خودش وجود داشته باشد که اگر آن شرط درست باشد، کدهای مربوطه اجرا شوند. برای درک بهتر به مثال زیر توجه فرمایید:
public class Main { public static void main(String[] args) { int Temp= 30; if(Temp==10) System.out.print("low"); else if(Temp==20) System.out.print("medium"); else if(Temp==30) System.out.print("high"); else System.out.print("not found"); } }
خروجی عبارت بالا به صورت زیر است:
high
دقت نمایید که فقط دستور if-elseی که Temp را برابر با 30 چک میکرد درست بود.
دستورات if تو در تو
گفته شد که اگر شرط if درست باشد، کدهای داخل Block آن اجرا می شوند. حال می توان در داخل هر بلاکی که برای if می نویسیم یک کد به صورت if بنویسیم. و حتی داخل آن نیز ifی دیگر و به همین ترتیب.
شکل کلی نمایش if تو در تو دوتایی به صورت زیر است:
if(Boolean_expression 1){ //Executes when the Boolean expression 1 is true if(Boolean_expression 2){ //Executes when the Boolean expression 2 is true } }
فقط توجه داشته باشید که برای دستورات چند خطی می توان از {} برای ساخت بلوک دستور استفاده کرد ولی اگر دستور مورد نظر یک خطی باشد نیازی به استفاده از این علائم نیست. همچنین برای if های تو در تو باید قانون تقدم و تاخر بلوک ها حفظ شود به این معنی که باید همیشه بلوک های داخلی که دیرتر باز شده اند زودتر بسته شوند و بلوک های بیرونی که زودتر از همه باز شده اند دیرتر از همه بسته شوند. برای راحتی کار می توان همچنان که در برنامه های زبان جاوا مصطلح است بلوک های داخلی را کمی داخل تر از بلوک های خارجی نوشت. برای مثال در کد بالا if داخلی کمی فرورفته تر از if خارجی است. با رعایت این قائده کد شما بسیار خواناتر خواهد بود.
برای مثال if های تودرتو به کد زیر دقت کنید:
public class Main { public static void main(String[] args) { int i= 30; int j= 35; int k= 40; if(i==30) if(j==35) if(k==40) System.out.print("40"); else System.out.print("not 40"); else System.out.print("not 35"); else System.out.print("not 30"); } }
خروجی مثال بالا 40 است. زیرا سه if را با موفقیت پشت سر گذاشته است.
در مثال بالا می توانید با بازی با اعدادی که برای متغیرهای i و j و k انتخاب کرده ایم با این ساختار آشنا شوید.
َشرط Switch
اگر یک متغیر چندین حالت داشته باشد و حالت های رخ دهنده آن متغیر برای ما مشخص باشد می توان از شرط switch برای بررسی ان استفاده کرد. هر مقداری که ممکن است برای متغیر پیش بیاید یک case نامیده می شود و مقدار کنونی متغیر با کیس های گوناگون بررسی خواهد شد و اگر با یک کیس تناسب داشت کدهای متناظر با آن کیس اجرا خواهد شد. دقت کنید که همان طور که در توضیح break در بخش حلقه ها توضیح دادیم انتهای هر case یک break خواهیم داشت. البته اگر در انتهای case از break استفاده نکنیم با case بعدی هم متغیر بررسی خواهد شد و اگر مناسب باشد کد آن case هم اجرا خواهد شد.
شکل نوشتاری ان شرط به شکل زیر است:
switch(expression){ case value : //Statements break; //optional case value : //Statements break; //optional //You can have any number of case statements. default : //Optional //Statements }
نکاتی که برای استفاده در شرط Switch باید رعایت کنید عبارت است از :
- در داخل سوییچ فقط می تواند اعداد، کاراکترها و enum ها (بعدا توضیح می دهیم) وجود داشته باشد.
- بعد از کلمه کلیدی case و مقدار متغیر از علامت دو نقطه (:) باید استفاده کنید.
- می توانید هر تعدادی که case بخواهید در داخل switch معرفی نمایید.
- نوع داده ای که به case می دهیم باید با نوع داده Switch یکی باشد.
- دستور case مانند if عمل می کند به طوری که هر زمان مقدار هر case درست باشد، کدهای مربوط به آن تا خط break اجرا می شوند.
- هر switch می تواند بخشی به نام default داشته باشد و هدف از این بخش آنست که اگر هیچ کدام از case ها اجرا نشوند، switch به سراغ default رفته و قسمت Default را در نظر می گیرد.
- کد Break از کل switch خارج می کند.
کد Break اختیاری است، به همین دلیل اگر در یک case از break استفاده نکنید، پس از اتمام کدهای داخل آن case ، برنامه به سراغ case بعدی می رود و اگر شرط آن نیز درست بود به همین ترتیب ادامه می دهد. پس باید برای خروج از switch به طور کامل از دستور break استفاده نمود.
به مثال زیر توجه فرمایید:
public class Main { public static void main(String[] args) { char ch= 'b'; switch(ch){ case 'a': System.out.print("a"); break; case 'b': System.out.print("b"); break; case 'c': System.out.print("c"); break; } } }