Циклы (break и return, continue, метки) - 1

— Привет, Амиго!

Сегодня я тебе расскажу про некоторые удобные вещи в работе с циклами.

Первая такая вещь – это ключевое слово break. Если в теле цикла написать такую инструкцию, то при ее выполнении цикл сразу завершится. Пример:

Пример Результат работы цикла:
for (int i=0;i<10;i++)
{
System.out.println(i);
if (i>5)
break;
}
0
1
2
3
4
5
6

— А break можно использовать только в цикле?

— Да. break можно использовать только в цикле. При выполнении команды break цикл тут же завершается.

— Ок. Понятно.

— Отлично. Теперь вторая команда – это ключевое слово continue. Его тоже можно использовать только в цикле. При выполнении этой команды, сразу начинается новая итерация цикла. Другими словами, просто пропускается весь код тела цикла.

Пример:

Пример Результат работы цикла:
for (int i=0;i<10;i++)
{
if (i%2==0)
continue;
System.out.println(i);
}
1
3
5
7
9

— Т.е. как только программа доходит до исполнения команды continue внутри цикла, она перестает выполнять код в нем?

— Нет. Смотри. Цикл – это когда мы выполняем один и то же код несколько раз. В примере выше – у нас цикл от 0 до 9 – т.е. тело цикла выполнится 10 раз. Так?

— Да.

— Одно такое исполнение кода тела цикла называется итерацией цикла. Наш цикл состоит из 10 итераций – десяти исполнений кода в его теле.

— Да, это ясно.

— Команда continue преждевременно завершает текущую итерацию — код внутри цикла пропускается и начинается новая итерация.

Вот тебе еще пример:

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

В данном примере мы выводим на экран строковое представление всех объектов, содержащихся в списке list. Но пропускаем все объекты, которые равны null.

— Да, ясно. Очень удобная штука, я смотрю.

— Ага. Еще хочу рассказать тебе про метки. Они редко используются в Java, т.к. часто нарушают красоту логики программы. Но ты можешь встретить их где-то в коде. Так что лучше пусть ты от меня услышишь о них, чем где-то во дворе.

Давным-давно в коде разрешалось прыгать с любой строчки на любую. Для этого использовались метки и оператор goto. Вот как это выглядело:

Ужасный код с метками
System.out.println("Мир");
label: System.out.println("Труд");
System.out.println("Май");
goto label;

В данном примере, после выполнении команды goto label, программа прыгала на строку, обозначенную меткой label.

Потом все дружно прозрели и решили не использовать оператор goto. В Java его до сих пор нет, но ключевое слово goto зарезервировано. Мало ли…

— Т.е. ни goto, ни меток в Java нет?

— Оператора goto нет, а метки есть!

— Это как же это?

— Метки можно использовать в Java вместе с командами continue и break. Они используются, когда у тебя много вложенных циклов.

Например, у тебя 5 вложенных циклов и ты хочешь, при выполнении некоторого условия, выйти из трех из них, но не из всех. Метки позволяют сделать это красиво:

Пример
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.

— И как часто это используется?

— Если честно, то не часто, но мало ли. Может, встретишь где-нибудь. Это основы синтаксиса – это все надо знать!

— Ок. Спасибо, Билаабо.