Цикли (прекъсване и връщане, продължаване, етикети) - 1

„Здрасти, Амиго!“

„Днес ще ви разкажа за някои неща, които са удобни при работа с цикли.“

"Първата е ключовата дума break . Ако използвате тази команда в тялото на цикъл, тогава цикълът ще приключи незабавно, когато командата бъде изпълнена. Ето един пример:"

Пример Изход:
for (int i = 0; i < 10; i++)
{
System.out.println(i);
if (i > 5)
break;
}
0
1
2
3
4
5

„Може ли break да се използва само в цикъл?“

"Да. Инструкцията за прекъсване може да се използва само в цикъл. Когато се изпълни команда за прекъсване, цикълът прекратява незабавно."

"Добре, разбрах."

„Страхотно. Сега второто нещо, което искам да споделя, е ключовата дума continue. Тя също може да се използва само в цикъл. Когато тази команда се изпълни, незабавно започва нова итерация на цикъла. С други думи, всеки оставащ code в тялото на цикъла просто се пропуска."

"Ето един пример:"

Пример Изход:
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
continue;
System.out.println(i);
}
1
3
5
7
9

„Значи, след като програмата достигне до команда за продължаване в цикъл, тя спира да изпълнява codeа в цикъла?“

"Не. Вижте, имаме цикъл, когато изпълним един и същ code няколко пъти. В примера по-горе имаме цикъл от 0 до 9, т.е. тялото на цикъла ще бъде изпълнено 10 пъти. Нали?"

— Да.

„Едно преминаване през тялото на цикъла се нарича итерация. Нашият цикъл се състои от 10 итерации – тялото на цикъла ще бъде изпълнено десет пъти.“

— Да, това е ясно.

„ Командата за продължаване прекратява текущата итерация преждевременно, т.е. всеки оставащ code в цикъла се пропуска и започва нова итерация.“

„Ето още един пример:“

Пример
ArrayList list = new ArrayList();
for (Object o: list)
{
if (o == null) continue;
System.out.println(o.toString());
}

"В този пример показваме низово представяне на всички обекти в списъка. Но пропускаме всички обекти, които са нулеви."

„Добре, разбрах. Виждам колко удобно е това.“

„Да. Искам да ви разкажа и за етикетите. Те рядко се използват в Java, защото често нарушават красотата на логиката на програмата. Но може да ги срещнете в codeа в даден момент. Така че предпочитам да ви разкажа за отколкото сте чували за тях на детската площадка."

„Веднъж беше позволено да се прескача от всеки ред на всеки ред в codeа. Направихме това с помощта на етикети и командата goto. Ето How изглежда:“

Ужасен code с етикети
System.out.println("Make cookies,");
label: System.out.println("not");
System.out.println("war");
goto label;

„В този пример, след като се изпълни командата goto label , програмата прескача на реда, отбелязан с етикет .

„По-късно всички помъдряха и решиха да не използват оператора goto . Java не поддържа goto, но goto е запазена дума. Не е голяма работа…“

„Значи няма goto и етикети в Java?“

„Няма оператор goto, но има етикети!“

"Как може да бъде?"

„В Java етикетите могат да се използват с командите за продължаване и прекъсване. Те се използват, когато имате много вложени цикли.“

"Например, да предположим, че имате 5 вложени цикъла и когато дадено condition е изпълнено, искате да излезете от три от тях, но не всички. Етикетите са елегантен начин да направите това:"

Пример
label1: for (int i = 0; i < 10; i++)
 label2: for (int j = 0; j < 10; j++)
  label3: for (int k =0; k < 10; k++)
   if (i == j && j == k)
    break label2;

„В този пример, когато операторът break се изпълни, ние излизаме не от цикъла с променлива k, а от цикъла с етикет label2 – т.е. веднага излизаме от двата цикъла с k и j.“

„Колко често се използва това?“

„Честно казано, не често, но никога не се знае. Може би ще го видите някой път. Това са основи на синтаксиса – трябва да знаете всичко това!“

"ОК. Благодаря ти, Билаабо."