الحلقات و جمل التحكم في جافا | Java loops

 الحلقات في جافا

نستخدم الحلقات في جافا ( Loops ) بهدف تكرار نفس الكود عدة مرات.
إذاً أي كود نريده أن يتنفذ عدة مرات, نقوم بكتابته داخل حلقة فتقوم هي بإعادة تنفيذ الكود قدر ما شئنا ضمن شروط معينة نقوم نحن بتحديدها.


طريقة تنفيذ الأوامر و الحلقات في الذاكرة

الأوامر في العادة تتنفذ بتسلسل وراء بعضها, و لكن الحلقات تجعل سهم تنفيذ الأوامر يقف عندها فيقوم بتنفيذ الأوامر التي بداخلها عدة مرات, و بعد أن يخرج من الحلقة يعود و يكمل تنفيذ باقي الأوامر الموجودة بعدها كالتالي.


عندما تتنفذ الحلقة فإن الأوامر الموضوعة فيها تنفذ بشكل منفصل عن باقي الأوامر الموجودة في البرنامج, أي يمكنك إعتبار أن جميع أوامر الحلقة توضع في مكان خاص في الذاكرة, هذا المكان يسمى scope.

بعد أن تتنفذ جميع أوامر الحلقة في هذا الـ scope, يتم مسح الـ scope كلياً من الذاكرة و هذه العملية تسمى Destroy.

أنواع الحلقات في جافا

إسم الحلقة دواعي الإستخدام
For Loop تستخدم الحلقة for في حال كان عدد المرات التي سيعاد فيها تنفيذ الكود معروفاً.
شرح الحلقة for في جافا
While Loop يفضل إستخدام الحلقة while في حال كان عدد المرات التي سيعاد فيها تنفيذ الكود غير معروف.
شرح الحلقة while في جافا
Do While Loop يفضل إستخدام الحلقة do while في حال كان عدد المرات التي سيعاد فيها تنفيذ الكود غير معروف و بنفس الوقت يجب أن يتنفذ مرة واحدة على الأقل.
شرح الحلقة do while في جافا

جمل التحكم مع الحلقات في جافا

نستخدم جمل التحكم ( Control Statements ) للتحكم في سير تنفيذ الحلقات و مع جملة الشرط switch.


جملة التحكم تعريفها
Break Statement تستخدم في الحلقات و في الجملة switch.
بمجرد ان تنفذ الجملة break فإنها توقف الـ scope بأكمله و تخرج منه و تمسحه من الذاكرة ثم تنتقل للكود الذي يليه في البرنامج.
شرح جملة التحكم break في جافا
Continue Statement تستخدم مع الحلقات فقط.
نستخدمها لتجاوز تنفيذ كود معين في الحلقة, إذاً نستخدمها لتجاوز جزء من كود الـ scope.
شرح جملة التحكم continue في جافا

ملاحظة: سنشرح الجملة break مع الجملة switch في الدرس التالي.

 الحلقة for في جافا

نستخدم الحلقة for إذا كنا نريد تنفيذ الكود عدة مرات محددة, فمثلاً إذا كنا نريد تنفيذ كود معين 10 مرات, نضعه بداخل حلقة تعيد نفسها 10 دورات.


طريقة إستخدام الحلقة for في جافا

for( initialisation; condition; increment أو decrement )
{
    // statements
}

  • initialisation:   هي أول خطوة تتنفذ في الحلقة و هي تتنفذ مرة واحدة فقط على عكس جميع العناصر الموجودة في الحلقة.
    في هذه الخطوة نقوم بتعريف متغير ( يسمى عداد ) و نضع بعده ;.


  • condition:   هي ثاني خطوة تتنفذ في الحلقة و هي تتنفذ في كل دورة.
    في هذه الخطوة نقوم بوضع شرط يحدد متى تتوقف الحلقة, في كل دورة يتم التأكد أولاً إذا تحقق هذا الشرط أم لا, و نضع بعده ;.
    هنا طالما أن نتيجة الشرط تساوي true سيعيد تكرار الكود.


  • statements:   هي الخطوة الثالثة, و تعني تنفيذ جميع الأوامر الموجودة في الحلقة و هي تتنفذ في كل دورة.
    بعد أن تتنفذ جميع الأوامر سيصعد إلى الخطوة الأخيرة التي تحدث في نهاية كل دورة و هي إما زيادة قيمة العداد أو إنقاصها.


  • decrement أو increment:   هي الخطوة الرابعة و الأخيرة, و هي تتنفذ في كل دورة.
    هنا نحدد كيف تزداد أو تنقص قيمة العداد, و لا نضع بعده ;.


تذكر فقط أن جميع هذه الخطوات تتكرر في كل دورة ما عدا أول خطوة, و السبب أننا لا نحتاج إلى تعريف عداد جديد في كل دورة, بل نستعمل العداد القديم و الذي من خلاله نعرف في أي دورة أصبحنا.

 الحلقة while في جافا

نستخدم الحلقة while إذا كنا نريد تنفيذ الكود عدة مرات, ولكننا لا نعرف كم مرة بالتحديد لأننا نريد إيقاف التنفيذ إذا تحقق شرط معين.
هذه الحلقة تتوقف عن تكرار نفسها إذا تحقق الشرط الذي وضعناه لها.

هنا كأننا نقول: " طالما أن الشرط لم يتحقق إستمر في تكرار الكود ".


طريقة إستخدام الحلقة while في جافا

initialisation;

while( condition )
{
    // statements

    increment أو decrement;
}

  • initialisation:   هي أول خطوة تتنفذ في الحلقة و هي تتنفذ مرة واحدة فقط على عكس جميع العناصر الموجودة في الحلقة.
    في هذه الخطوة نقوم بتعريف متغير ( يسمى عداد ).


  • condition:   هي ثاني خطوة تتنفذ في الحلقة و هي تتنفذ في كل دورة.
    في هذه الخطوة نقوم بوضع شرط يحدد متى تتوقف الحلقة, في كل دورة يتم التأكد أولاً إذا تحقق هذا الشرط أم لا.
    هنا طالما أن نتيجة الشرط تساوي true سيعيد تكرار الكود.


  • statements:   هي الخطوة الثالثة, و تعني تنفيذ جميع الأوامر الموجودة في الحلقة و هي تتنفذ في كل دورة.


  • decrement أو increment:   هي الخطوة الرابعة و الأخيرة, و هي تتنفذ في كل دورة.
    هنا نحدد كيف تزداد أو تنقص قيمة العداد.


تذكر فقط أن جميع هذه الخطوات تتكرر في كل دورة ما عدا أول خطوة, و السبب أننا لا نحتاج إلى تعريف عداد جديد في كل دورة, بل نستعمل العداد القديم و الذي من خلاله نعرف في أي دورة أصبحنا.

 الحلقة do while في جافا

نستخدم الحلقة do while إذا كنا نريد تنفيذ الكود عدة مرات, ولكننا لا نعرف كم مرة بالتحديد لأننا نريد إيقاف التنفيذ إذا تحقق شرط معين.
هذه الحلقة تتوقف عن تكرار نفسها إذا تحقق الشرط الذي وضعناه لها.

الفرق الوحيد بينها و بين الحلقة while أنها تتنفذ مرة واحدة على الأقل لأنها تتأكد من الشرط بعد تنفيذ الأوامر و ليس قبلهم.

هنا كأننا نقول: " طالما أن الشرط لم يتحقق إستمر في تكرار الكود ".


طريقة إستخدام الحلقة do while في جافا

initialisation;

do{
    // statements
    increment أو decrement;
}
While( condition );

  • initialisation:   هي أول خطوة تتنفذ في الحلقة و هي تتنفذ مرة واحدة فقط على عكس جميع العناصر الموجودة في الحلقة.
    في هذه الخطوة نقوم بتعريف متغير ( يسمى عداد ).


  • statements:   هي الخطوة الثانية, و تعني تنفيذ جميع الأوامر الموجودة في الحلقة و هي تتنفذ في كل دورة.


  • decrement أو increment:   هي الخطوة الثالثة, و هي تتنفذ في كل دورة.
    هنا نحدد كيف تزداد أو تنقص قيمة العداد.


  • condition:   هي الخطوة الرابعة و الأخيرة و هي تتنفذ في كل دورة.
    في هذه الخطوة نقوم بوضع شرط يحدد متى تتوقف الحلقة, في نهاية كل دورة يتم التأكد إذا تحقق الشرط أم لا.
    هنا طالما أن نتيجة الشرط تساوي true سيعيد تكرار الكود.


تذكر فقط أن جميع هذه الخطوات تتكرر في كل دورة ما عدا أول خطوة, و السبب أننا لا نحتاج إلى تعريف عداد جديد في كل دورة, بل نستعمل العداد القديم و الذي من خلاله نعرف في أي دورة أصبحنا.

 جملة التحكم break في جافا

الجملة break تستخدم في الحلقات و في الجملة switch.
بمجرد ان تنفذ الجملة break فإنها توقف الـ scope بأكمله و تخرج منه و تمسحه من الذاكرة ثم تنتقل للكود الذي يليه في البرنامج.


طريقة تعريف الجملة التحكم break في جافا

تتألف هذه الجملة من أمر واحد و يكتب على سطر منفرد.

                    break;
                  

مثال حول جملة التحكم break في جافا

في المثال التالي قمنا بتعريف حلقة كانت ستطبع جميع الأرقام من 1 إلى 10 لولا أننا إستخدمنا الجملة break لجعل الحلقة تتوقف عندما تصبح قيمة العداد i تساوي 6.

مثال 

Main.java
                      public class Main {

                      public static void main(String[] args) {

                      // تتألف من 10 دورات. في كل دورة تطبع قيمة العداد المستخدم فيها for هنا قمنا بإنشاء حلقة
                      for( int i=1; i<=10; i++ )
                      {
                      // في كل دورة سيتم فحص قيمة العداد و بمجرد أن تصبح تساوي 6 سيتم إيقاف الحلقة نهائياً
                      if( i == 6 ) {
                      break;
                      }

                      System.out.println( i );
                      }

                      }

                      }
                    

سنحصل على النتيجة التالية عند التشغيل.

                      1
                      2
                      3
                      4
                      5
                    

إذاً الجملة break جعلت الحلقة تتوقف عندما أصبحت قيمة العداد i تساوي 6.


ملاحظة هامه في جملة التحكم break في جافا

هنا قمنا بتجربة الجملة break مع الحلقة for فقط, لكن المبدأ هو نفسه تماماً مع الحلقات while و do while.


الجملة  continue في جافا

نستخدم الجملة continue لتجاوز تنفيذ كود معين في الحلقة, إذاً نستخدمها لتجاوز جزء من كود الـ scope.

و نستخدمها تحديداً لإيقاف الدورة الحالية و الإنتقال إلى الدورة التالية في الحلقة, لا تقلق ستفهم المقصود من المثال.


طريقة  تعريف الجملة  continue في جافا

تتألف هذه الجملة من أمر واحد و يكتب على سطر منفرد.

                    continue;
                  

أمثلة حول  الجملة  continue في جافا

في المثال التالي قمنا بتعريف حلقة تطبع جميع الأرقام من 1 إلى 10 ما عدا الرقم 3.
إستخدمنا الجملة continue لجعل الحلقة تتجاوز الدورة الثالثة في الحلقة. أي لن يتم تنفيذ أمر الطباعة عندما تصبح قيمة العداد i تساوي 3.

المثال الأول


Main.java
                      public class Main {

                      public static void main(String[] args) {

                      // تتألف من 10 دورات. في كل دورة تطبع قيمة العداد المستخدم فيها for هنا قمنا بإنشاء حلقة
                      for (int i=1; i<=10; i++)
                      {
                      // في كل دورة سيتم فحص قيمة العداد, عندما تصبح تساوي 3 سيتم الإنتقال إلى الدورة التالية في الحلقة بدون تنفيذ أمر الطباعة الموضوع بعدها
                      if (i == 3) {
                      continue;
                      }

                      System.out.println(i);
                      }

                      }

                      }
                    

سنحصل على النتيجة التالية عند التشغيل.

                      1
                      2
                      4
                      5
                      6
                      7
                      8
                      9
                      10
                    

إذاً الجملة continue جعلت الحلقة تتجاوز الدورة الثالثة, لذلك لم تطبع الرقم 3 لأنها لم تنفذ أمر الطباعة في الدورة الثالثة.


في المثال التالي قمنا بتعريف حلقة تطبع جميع الأرقام المفردة من 1 إلى 10.
إستخدمنا الجملة continue لجعل الحلقة تتجاوز كل دورة تكون فيها قيمة العداد i عبارة عن عدد مزدوج.

المثال الثاني


Main.java
                      public class Main {

                      public static void main(String[] args) {

                      // تتألف من 10 دورات. في كل دورة تطبع قيمة العداد المستخدم فيها for هنا قمنا بإنشاء حلقة
                      for (int i=1; i<=10; i++)
                      {
                      // في كل دورة سيتم فحص قيمة العداد, في حال كانت مزدوجة سيتم الإنتقال إلى الدورة التالية في الحلقة بدون تنفيذ أمر الطباعة الموضوع بعدها
                      if (i%2 == 0) {
                      continue;
                      }

                      System.out.println(i);
                      }

                      }

                      }
                    

سنحصل على النتيجة التالية عند التشغيل.

                      1
                      3
                      5
                      7
                      9
                    

إذاً الجملة continue جعلت الحلقة تتجاوز كل دورة كانت فيها قيمة العداد عبارة عن عدد مفرد.


ملاحظة

هنا قمنا بتجربة الجملة continue مع الحلقة for فقط, لكن المبدأ هو نفسه تماماً مع الحلقات while و do while.