Именованный цикл?

Встретил на ютьюбе видео (точнее, шорт), который начинается так:

Этот вопрос ставит в тупик даже опытного разработчика: как создать именованный цикл? Каждый из нас пользуется циклами, но далеко не каждый знает, что циклу можно дать имя.

И речь там идёт, конечно же, о метке перед циклом типа такого:

OUTER: for (int x : a) {
 for (int y : b) {
  if (x + y == z) {
   break OUTER;
  }
 }
}

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

Во многих языках к меткам обычно прилагается возможность перейти на них (goto) и метка по сути олицетворяет некую позицию в коде. Для метки неважно, что перед ней и что после неё, она - лишь позиция в коде - как курсор в тексе.

В джаве же, как и в большинстве других языков, где метка ставится перед циклами и блоками, к ней не прилагается goto - вместо него даются команды управления циклом/блоком break и continue с меткой. Тут уже важно, перед чем стоит метка. Она олицетворяет не позицию, а весь statement, перед которым стоит, и является инструментом воздействия на этот участок. Кажется, что для такого вполне подходит понятие "имя", а цикл или блок кода можно назвать именованным.

Гугл выдаёт крайне мало результатов по сочетанию "именованный цикл", так что я так понимаю, что это название (почти) никто не использует. Почему так? Просто никто не задумывался над таким вариантом имени и такой интерпретацией метки, или же я чего-то не замечаю и это название на самом деле не подходит?


Ответы (1 шт):

Автор решения: Roman C

Почему так? Просто никто не задумывался над таким вариантом имени и такой интерпретацией метки, или же я чего-то не замечаю и это название на самом деле не подходит?

Потому, что такого названия не существует. Вы можете как угодно называть цикл, но в Java все укладывается в спецификацию, где четко определено, что такое цикл и какое у него название. Придумывать из головы какое-нибудь название ещё бессмысленно и бесполезно.

В примере метка поставлена на утверждение цикла for. Два утверждения - следовательно два цикла. Может быть кто-то скажет, что метка -break label тоже является циклом, и тогда будет уже не два цикла а три. Но это на самом деле не так, а вот если действительно создать третий цикл, то нужно избавиться от метки break label. Но это к сожалению не всегда возможно, поэтому утверждения break label и continue label до сих пор существуют в языке.

→ Ссылка