مرحبا بجميع الزملاء والمهتمين فقط.
سننظر اليوم إلى إحدى ميزات لغة برمجة Java مثل عامل التوقف. هذه هي المقالة الأولى حول موضوع عوامل النقل، لذا إذا أعجبتك، سأكون سعيدًا بكتابة المزيد. أود أن أشير على الفور إلى أن هذه المقالة مخصصة في المقام الأول للمطورين المبتدئين، وقد لا يجد الطلاب الأكثر تقدمًا أي شيء جديد لأنفسهم هنا. إذا هيا بنا. في Java، هناك طريقتان لتغيير الترتيب الذي يتم به تنفيذ تعليمات البرنامج: عبارات القفز وآلية معالجة الاستثناءات. هناك ثلاثة عوامل تشغيل للقفز في Java: Break وContinue وReturn. اليوم أدعوك لإلقاء نظرة فاحصة على المشغل
break
. تعد معالجة الاستثناءات موضوعًا واسعًا لدرجة أنه خارج نطاق هذه المقالة. هناك ثلاث طرق لاستخدام عبارة Break في Java. الطريقة الأولى والأكثر شيوعًا هي استخدامها break
للخروج من الحلقة مبكرًا، على سبيل المثال:
public class SimpleExample {
public static void main(String[] args) {
findNumberInLoop(3);
}
public static void findNumberInLoop(int number){
for (int i = 0; i < 10; i++) {
if (i == number) {
break;
}
System.out.println(i);
}
System.out.println("cycle was finished");
}
}
سيعرض هذا المثال:
1
2
cycle was finished
وهذا يعني أنه عندما يصبح عداد الحلقة i
مساويًا للمعامل الذي تم تمريره number
، أي الرقم 3، يتم إنهاء تنفيذ الحلقة مبكرًا. إذا كان البرنامج يحتوي على عدة حلقات متداخلة، فقم بفصل المخرجات من الحلقة الأعمق فقط، على سبيل المثال:
public class SimpleExample {
public static void main(String[] args) {
findNumberInLoop(3);
}
public static void findNumberInLoop(int number){
for(int i = 0; i < 5; i++) {
for (int j =0; j < 10; j++) {
if(j == number) {
break;
}
System.out.print(j);
}
System.out.println();
}
System.out.println("cycles was finished");
}
}
هذا المثال ينتج الإخراج:
012
012
012
012
012
cycles was finished
كما يتبين من المثال، تتم مقاطعة الحلقة الداخلية في كل مرة عند الرقم 3 (المعلمة number
)، ويتم تنفيذ الحلقة الخارجية 5 مرات، على النحو المنشود. في لغة جافا، يمكنك استخدام أكثر من بيان فاصل داخل الحلقة، لكن هذا غير مستحسن، حيث أن قابلية قراءة التعليمات البرمجية وبنيتها تتدهور بشكل كبير. الاستخدام الثاني break
هو استخدامه لمقاطعة تنفيذ التعليمات في الفروع switch
، على سبيل المثال:
public class SimpleExample {
public static void main(String[] args) {
square(2);
}
public static void square(int number){
switch (number){
case 1:
System.out.println(number*number);
break;
case 2:
System.out.println(number*number);
break;
case 3:
System.out.println(number*number);
break;
}
System.out.println("after switch");
}
}
سيؤدي تشغيل هذا المثال إلى إنتاج الإخراج:
4
after switch
قامت عبارة Break بتمرير التحكم إلى الكود الذي يتبع الكتلة بأكملها switch
. إذا لم تحدد break
في switch
هذا المثال:
public class SimpleExample {
public static void main(String[] args) {
square(2);
}
public static void square(int number){
switch (number){
case 1:
System.out.println(number*number);
case 2:
System.out.println(number*number);
case 3:
System.out.println(number*number);
}
System.out.println("after switch");
}
}
لن يكون الإخراج كما هو متوقع:
4
4
after switch
حدث هذا لأنه بعد تنفيذ الكتلة، case 2
استمر البرنامج في تنفيذ جميع كتل الحالات اللاحقة ، مما أعطانا الإخراج المقابل. في بعض الأحيان قد تكون هذه الميزة للمشغل switch
مفيدة لنا، على سبيل المثال:
public class SimpleExample {
public static void main(String[] args) {
compare(2);
compare(7);
compare(12);
}
public static void compare(int number){
switch (number){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("number is less than 5 or equal 5");
break;
case 6:
case 7:
case 8:
case 9:
System.out.println("number is greater than 5");
break;
default:
System.out.println("number is less than 0 or greater than 9");
}
System.out.println("after switch");
}
}
يقوم هذا البرنامج بمقارنة رقم معين بالرقم 5 ويعطي النتيجة التالية:
after switch
number is greater than 5
after switch
number is less than 0 or greater than 9
after switch
عندما يتم استدعاء الطريقة لأول مرة، يقوم المشغل switch
بنقل التحكم إلى المشغل case 2
ثم إلى المشغل break
في case 5
. الاستدعاء الثاني مشابه للأول، لكنه يبدأ بـ c case 7
. الاستدعاء الثالث لا يجد قيمة مناسبة بين جميع الحالات، لذلك يتم تنفيذ العامل default
. الطريقة الثالثة هي استخدام عامل التشغيل break
بدلاً من goto
عامل التشغيل C. للقيام بذلك، سنستخدم نموذجًا خاصًا للعامل break
يسمى break
مع تسمية. يشبه هذا النموذج break метка;
تسمية - وهذا عادة ما يكون أي اسم مناسب من مساحة اسم Java، يسبق كتلة التعليمات البرمجية. علاوة على ذلك، بعد تطبيق هذه الكتلة من التعليمات البرمجية break
مع التسمية، سيستمر تنفيذ التعليمات البرمجية من المكان بعد الكتلة مع التسمية المقابلة، على سبيل المثال:
public class SimpleExample {
public static void main(String[] args) {
howWeUseLabels(true);
System.out.println();
howWeUseLabels(false);
}
public static void howWeUseLabels(boolean bool) {
firstBlock:{
secondBlock:{
thirdBlock:{
System.out.println("We will see it always");
if(bool) {
break secondBlock;
}
System.out.println("We won't see it if bool == true");
}
System.out.println("We won't see it if bool == true");
}
System.out.println("We will see it always");
}
}
}
هذا المثال سوف ينتج المخرجات التالية:
We will see it always
We will see it always
We will see it always
We won't see it if bool == true
We won't see it if bool == true
We will see it always
بعد استدعاء الطريقة الأولى، يقوم المشغل break
بنقل التحكم إلى نهاية الكتلة secondBlock
، والخروج secondBlock
و thirdBlock
، أثناء تنفيذ عامل آخر println()
في النهاية firstBlock
. بعد المكالمة الثانية، يتم عرض جميع الخطوط على الشاشة. يمكن أيضًا استخدام الملصقات للإشارة إلى الدورات. يجب أن نتذكر أنه لا يمكنك الانتقال إلى الملصق إلا من داخل مجموعة التعليمات البرمجية المشار إليها بواسطة الملصق؛ على سبيل المثال، لن يتم تجميع هذا الرمز:
public class SimpleExample {
public static void main(String[] args) {
label:{
System.out.println("inside label");
}
if(true) {
break label;
}
System.out.println("This is error");
}
}
ملاحظات حول نظافة الكود والبيان break
: هناك نصيحة مقبولة بشكل عام لاستخدام العبارة break
بحذر شديد، نظرًا لأن الاستخدام break
يجعل فهم الحلقة أكثر صعوبة ويجبر المبرمج على النظر داخل الحلقة لفهم الفروق الدقيقة في عملها. هناك قاعدة إرشادية break
يمكنك استخدامها بثقة أكبر في الحلقات الأقصر وبحذر أكبر في الحلقات الطويلة والمتداخلة بعمق، لأن هذا يزيد من احتمالية حدوث الأخطاء ويعقد قراءة وفهم التعليمات البرمجية الخاصة بك من قبل المبرمجين الآخرين. كما كتبت أعلاه، يشير استخدام عدد كبير من الرموز break
المنتشرة في جميع أنحاء الكود إلى أن المبرمج لا يفهم تمامًا سبب كتابة الكود الخاص به بهذه الطريقة. قد يكون من المفيد التفكير في إعادة هيكلة مثل هذه الحلقة عن طريق تقسيمها إلى عدة حلقات أصغر. حاول توخي الحذر عند استخدام break
الملصق كبديل goto
، حيث يؤدي ذلك إلى تعقيد بنية التعليمات البرمجية. هذا كل ما أردت أن أخبركم به اليوم عن عامل التشغيل break
في Java. سأكون سعيدًا بالنقد البناء، وأنا أيضًا على استعداد لكتابة تكملة حول المشغلين continue
و return
، إذا كنت مهتمًا.
GO TO FULL VERSION