عبارات کنترلی:

هر زبان برنامه سازی از عبارات کنترلی برای هدایت جریان اجرای برنامه بر اساس تغیییرات وضعیت آن استفاده می کند. عبارات کنترلی جاوا به دو دسته تقسیم می شوند: ۱- انتخاب  ۲- تکرار و۳- پرش. عبارات انتخابselection statement به برنامه ها امکان می دهد تا مسیر های اجرایی مختلفی را بر اساس نتیجه یک جمله جبری یا وضعیت یک متغیر؛انتخاب کند. عبارات کنترلiteration statement به برنامه ها امکان می دهد تا یک یا چند عبارت را تکرار کند(ایجاد حلقه ها) و عبارات پرشjump statement به برنامه ها امکان می دهد تا به صورت غیر خطیnonlinear اجرا شوند.


عبارات انتخاب جاوا

جاوا از دو نوع عبارت انتخاب پشتیبانی می کند: if وswitch . این عبارات امکان کنترل جریان اجرای برنامه ها را بر اساس شرایطی که تنها در طی اجرای مشخص می شوند؛ فراهم می سازد. این دو عبارت قدرت و انعطاف پذیری شگفت انگیزی دارند.

ساختار If 

عبارت if ؛عبارت انشعاب شرطی جاواست.با استفاده از آن می توان اجرای برنامه ها را از طریق دو مسیر مختلف هدایت نمود. با شکل کلی این عبارت آشنا می شویم:

If (condition) statement;Else statement;

Statement در هر یک از دو حالت می تواند یک عبارت واحد یا چند عبارت در بین brace(براکت) باشد.  Condition نیز می تواند هر شرطی با حاصل Boolean باشد. قسمتelse هم اختیاری است.

عبارت if به این شرح است: اگر حاصل condition مقدار true باشد در آن صورتstatement اولی  اجرا می شود و در غیر این صورت   statementدومی (در صورت وجود) اجرا می گردد. تحت هیچ شرایطی دو عبارت با هم اجرا نمی شود.

در بیشتر مواقع در شرط کنترلif از عملگرهای رابطه ای استفاده می شود اما این امر از نظر فنی ضرورت ندارد.


if های تو در تو(متداخل)

منظور از if تودرتو آن است که عبارتif  در یک if یا else دیگر قرار گیرد. Ifهای تودرتو در برنامه سازی بسیار متداول هستند. مهمترین نکته در مورد این نوعifها این است که باید به خاطر داشته باشید که هر عبارتelse همیشه به نزدیکترین عبارتif موجود در همان بلوکelse که باelse دیگری هم مرتبط نیست ارجاع دارد.


If (i==10) {

  If(j<20) a=b;
  If(k>
1000) c=d;  Else  a=c;
 }
Else a=d;

ساختار  if-else-if

یکی از ساختارهای برنامه سازی متداولی که بر اساس یک سری ifهای تودرتو بنا شده است ساختار if-else-if به صورت زیر نوشته می شود:


If (condition)Statement;Else if (condition)Statement;
Else if(condition)
Statement;
.
.
.
Else
Statement;

عبارات if از بالا به پایین اجرا می شوند .به محض اینکه حاصل یکی از شرطهای کنترل کننده if مقدار true باشد؛ عبارت مرتبط با آن if اجرا شده و از مابقی نردبان صرفنظر می شود.اگر هیچ یک از شرطها درست نباشد؛ آخرین عبارت else اجرا خواهد شد. آخرین else به صورت پیش فرض عمل می کند یعنی چنانچه هیچ یک از شرطها برقرار نباشد ؛ در آن صورت آخرین عبارت else اجرا می شود و اگر عبارتelse آخری موجود نباشد و مقدار تمام شرطها نیزfalse باشد در آن صورت هیچ عملی انجام نمی گیرد.

Switch

عبارتswitch عبارت انشعاب چند شاخه ای جاوا است. این عبارت روش آسانی برای هدایت کنترل اجرای برنامه به قسمتهای مختلف بر اساس مقدار یک جمله جبری فراهم می سازد. بدین ترتیب؛جایگزین بهتری برای یک سری عبارات if-else-if طولانی به شمار می آید:

Switch (expression) {
Case  value1:
//statement sequence
Break;
Case value2:
//statement sequence
Break;
.
.
.
Case valueN:
Break;
Default:
//default statement sequence
}

Expression باید از نوع byte,short ,int یا char باشد. هر یک ازvalue های مشخص شده در عبارات case باید از نظر نوع متناسب با expression باشند.(از مقادیر نوع enumeration که در آینده بررسی می شوند می توان برای کنترل switch استفاده نمود)
هر یک از مقادیرcase باید یک لیترال منحصر به فرد باشد(باید یک مقدار ثابت باشد و نه متغیر).مقدار case نباید تکراری باشد.

عملکردswitch به این شرح است:

مقدارexpression با هریک از مقادیر لیترال عبارت case مقایسه می شود. اگر مقدار متناظری پیدا شود؛ عبارت یا عبارتهای پس از case اجرا می شود. اگر هیچ یک از مقادیر ثابت با مقدار expression برابر نباشد؛ در آن صورت عبارتdefault اجرا می شود. با این وجود عبارت مذبور اختیاری است. اگر مقدار متناظری پیدا نشود و عبارت default هم موجود نباشد در آن صورت هیچ عملی انجام نمی شود.
از عبارتbreak درswitch برای پایان دادن به یک سری از عبارات استفاده می شود. وقتی نوبت به اجرای عبارتbreak می رسد؛ اجرای برنامه به نخستین سطر پس از کل عبارت switch هدایت می شود. بدین ترتیب کنترل از عبارت switch خارج می شود.
حذف عبارتbreak کاربردهای عملی زیادی در برنامه های واقعی دارد.

عبارات switch تو در تو

از عبارتswitch می توانید به عنوان یکی از عبارات یک switch دیگر استفاده کنید. ار آنجایی که هر عبارتswitch بلوک مخصوص به خود را تعریف می کند؛ هیچ تداخلی بین ثابت case های switch داخلی و خارجی پیش نمی آید.

سه ویژگی مهم و قابل توجه از عبارتswitch به طور خلاصه در ذیل فهرست شده اند:

  • عبارت switch بر خلاف عبارتif تنها قابلیت بررسی تساوی دو مقدار را دارد؛ در صورتی که if ها می توانندهر نوع جمله بولی را ارزیابی کنند. یعنی switch تنها مقداری را جستجو می کند که با یکی از ثابتهای case خود برابر باشد.
  • هیچکدام از ثابتهایcase در یک عبارتswitch نمی توانند با هم یکسان باشند.البته ثابتهای case یک عبارتswitch و عبارت switch داخل ن می توانند یکسان باشند.آآن می توانند یکسان باشند.
  • عبارتswitch معمولا کارآمد تر از مجموعه ای ازif های تودرتو است.

عبارات تکرار

عبارات تکرارiteration statement در جاوا عبارتند ازfor,while و do-while . نتیجه عملکرد این عبارات عموما حلقه loop نامیده می شود. هر حلقه مکررا مجموعه ای از دستورالعمل ها را آنقدر اجرا می کند تا شرط پایان کار برآورده شود. جاوا حلقه هایی برای برآورده ساختن تمام نیازهای برنامه سازی دارد.

While

حلقه while اصلی ترین حلقه جاوا محسوب می شود. تا زمانی که حاصل جمله کنترل کننده این حلقهtrue است؛ اجزای عبارت یا بلوکی از عبارات تکرار می شود. شکل کلی آن بدین صورت است:


While  (condition)  {
//body of loop
}
Condition می تواند هر جمله بولی باشد. تا زمانی که حاصل آن true باشد؛ قسمتbody اجرا می شود. هرگاه حاصل آن false شود؛ کنترل به نخستین سطر پس از حلقه هدایت می شود. چنانچه هدف تکرار ؛اجرای تنها یک عبارت باشد؛ وجود {} لازم نخواهد بود.
از آنجایی گه حلقه while جمله شرطی خود را در ابتدای حلقه بررسی می کند ؛ در صورت false بودن شرط؛ قسمت body حلقه اصلا اجرا نمی شود.
قسمت body حلقه while (یا سایر حلقه های جاوا) می تواند خالی باشد. دلیل این امر آن است که عبارتهایnull( عباراتی که تنها از یک” ; “ تشکیل می شوند)از نظر گرامری درست هستند.
Do – While

همانگونه که خواندید؛ چنانچه جمله شرطی کنترل کننده هر حلقه while از ابتدا false باشد؛ در آن صورت قسمت body حلقه اصلا اجرا نمی شود. اما گاهی لازم است قسمتbody حداقل یک مرتبه اجرا شود حتی اگر حاصل جمله شرطی از همان ابتدا false باشد. یعنی گاهی اوقات لازم است جمله شرطی را به جای ابتدا؛ در انتهای حلقه بررسی کنید.حلقهdo-while همیشه قسمتbody را حداقل یک مرتبه اجرا می کند ؛چرا که جمله شرطی آن در انتهای حلقه قرار دارد.شکل کلی آن را با هم می بینیم:


Do {
//body of loop
}while (condition);


هر بار که حلقه do-while تکرار می شود؛ ابتدا قسمتbody اجرا می شود و سپس حاصل جمله شرطی ارزیابی می گردد. اگر این حاصلtrue باشد؛حلقه تکرار خواهد شد و در غیر این صورت حلقه به پایان می رسد. شرطه حلقه باید حتما از نوع Boolean باشد.
حلقه do-while خصوصا زمانی مفید است که از آن برای پردازش گزینه های یک منو استفاده می کنید. چرا که معمولا در این گونه شرایط لازم است قسمتbody حداقل یک مرتبه اجرا شود.