الجمل الشرطية

التحكم في التدفق

لغة الجافا، مثل أي لغة برمجة، تدعم الجمل الشرطية والحلقات لتتحكم في التدفق. لنبدأ بالجمل الشرطية ومن ثم بالحلقات، ونختتمها بجملة الـ switch الثقيلة نوعاً ما، والتي يمكنك استخدامها عندما تريد أن تختبر قيم متعددة لجملة واحدة.

ملاحظة C++:
التحكم في التدفق في لغة الجافا بُنيتها مطابقة للبُنيات في لغتي C و C++، مع القليل من الاستثناءات. لا يوجد goto، ولكن يوجد نسخة مثيلة للـ break والتي يمكنك استخدامها للخروج من حلقة (والتي لربما قد تستخدم goto في لغة C). وأخيراً!Java SE 5.0 أضاف بديلاً لحلقة الـ for التي لا يوجد لها نظير في C أو C++، فهي شبيهة لحلقة الـ foreach في C#.

**مجال النطاق:
**قبل أن نبدأ الحديث عن البنية الحقيقية للتحكم يجب علينا ان نعرف أكثر حول النطاق.**

**النطاق** هو مجموعة من [[ترميز|الرموز]](codes) المكتوبة بلغة الجافا محاطة بأقواس . النطاق يعطي مجالا للمتغيرات التابعة للبرنامج. النطاق ممكن أن تكون متداخلة مع بعضها بحيث أن يكون نطاق داخل نطاق آخر . في المثال التالي نطاق متداخل مع نطاق آخر.
<syntaxhighlight lang="java">
public static void main(String[] args)
 {    
int n; 
int k;
  . . .  
 }       
     
  . . .   
		 } // k is only defined up to here 
}
</syntaxhighlight>
في النطاقات المتداخلة لا يمكن أن نقوم بتعريف متغيرين متماثلين . في المثال الأتي يوجد خطأ و لن يتم تشغيل البرنامج.
<syntaxhighlight lang="java">
{
int n;
 .  .  .
	{	     
int k ;
int n; // error--can't redefine n in inner block
.  .  . 
 							            }     
} 
</syntaxhighlight>

ملاحظة :
في لغة C++ من ممكن تعريف متغيرين متماثلين في النطاقات المتداخلة بحيث أن المتغير الداخلي يخفي المتغير المعرف في النطاق الخارجي و هذا ممكن أن يسبب أخطاء في البرمجة لذلك لغة الجافا لا تسمح بإعادة تعريف المتغيرات في النطاقات المتداخلة .

**الجمل الشرطية :
'''لكتابة الجمل الشرطية بلغة الجافا , سوف تكون على صياغة :
  If (condition) statement
«يجب أن يكون الشرط condition محاط بالأقواس من جهتين»
في لغة الجافا و غيرها من لغات البرمجة , الجمل الشرطية statement تنفذ فقط عندما يتحقق شرط معين، فكأنما نقول : إذا تحقق هذا الشرط نفذ هذه الجملة، وإلا لا تنفذها. في حال وجود أكثر من جملة سوف تكتب على شكل التالي:

```java
if (condition)
{
Statment1
Statment2
…………….
}
```


مثال عل الجمل الشرطية :

```java
If (yourSales >= target)
 {     Performance = "Satisfactory";  
 Bonus = 100 ;}
```


في هذا المثال نرى أن جملة if تتكون من شرط وأمر، وفي المثال إذا كانت قيمة yourSales أكبر أو يساوي target ، في هذه الحالة الشرط سوف يتحقق ، إن لم يتحقق الشرط ( مثلاً إن قمنا بإسناد قيمة للمتغير yourSales أقل من targetفسوف يتجاهل المترجم الجملة ولن ينفذ الأمر.)

FlowControl.png



ملاحظة :
الجمل المركبة عبارة عن مجموعة من الجمل البسيطة محاطة بالأقواس

```java
{     statement1  
      statement2 
……………….
}
```


 
الطريقة الأكثر عمومية في الجافا يشبه ما هو في الأسفل (انظر الشكل ):

```java
if ((الشرط statement1(الامر الأول ) else statement2(الأمر الثاني )
 مثال على ذلك :  
if (yourSales >= target)
 {   
  performance = "Satisfactory"; 
  bonus = 100 + 0.01 * (yourSales - target); 
} 
Else
 {     
performance = "Unsatisfactory"; 
  bonus = 0;
 }
```

رسم بياني لتوضيح الجملة شرطية if else

IfElse.png



جزء(else )دائما اختياري . حيث كل (else ) ترتبط مع أقرب (if) . وهكذا و كما هو موضح

```java
if (x <= 0) if (x == 0) sign = 0; else sign = -1;
```

تنتمتي(else) إلى (if) الثانية . حيث فكرة الاقواس فكرة جيدة لتوضيح الكود البرمجي :

```java
if (x <= 0) { if (x == 0) sign = 0; else sign = -1;}
```


if المتكررة .... if else ... , هي البديل في العادة (انظر الشكل في الأسفل)


```java
if (yourSales >= 2 * target)
 {    
 performance = "Excellent";
   bonus = 1000; 
} 
else if (yourSales >= 1.5 * target)
 {     
performance = "Fine"; 
  bonus = 500; } 
else if (yourSales >= target)
{     performance = "Satisfactory";  
 bonus = 100;
 }
 else 
{   
  System.out.println("You're fired");
 }
```

رسم بياني لتوضيح الجملة شرطيةif-else if:

Ififelse.png



## مراجع

تصنيف:لغة