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

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

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

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

**النطاق** هو مجموعة من الرموز(codes) المكتوبة بلغة الجافا محاطة بأقواس. النطاق يعطي مجالا للمتغيرات التابعة للبرنامج. النطاق ممكن أن تكون متداخلة مع بعضها بحيث أن يكون نطاق داخل نطاق آخر. في المثال التالي نطاق متداخل مع نطاق آخر.

```
public static void main(String[] args)
 { 
int n; 
int k;
. .. 
 } 
 
. .. 
 } // k is only defined up to here 
}

```

في النطاقات المتداخلة لا يمكن أن نقوم بتعريف متغيرين متماثلين. في المثال الأتي يوجد خطأ و لن يتم تشغيل البرنامج.

```
{
int n;
. . .
 { 
int k ;
int n; // error--can't redefine n in inner block
.. . 
 } 
}

```

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

**الجمل الشرطية :**
**لكتابة الجمل الشرطية بلغة الجافا , سوف تكون على صياغة :**

```
 If (condition) statement
```

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

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

```

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

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

```

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

* 

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

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

```

  

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

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

```

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

* 

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

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

```

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

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

```

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

```
 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:

*

مراجع
-----

1. ↑  HORSTMANN , CORNELL (n.d.) core java VOLUME I-FUNDAMENTALS , 5th edn. : prentice hall.

* أيقونة بوابةبوابة برمجة الحاسوب