Bucle (rupere și întoarcere, continuare, etichete) - 1

"Bună, Amigo!"

„Astăzi vă voi spune despre câteva lucruri care sunt convenabile atunci când lucrați cu bucle.”

„Primul este cuvântul cheie break . Dacă utilizați această comandă în corpul unei bucle, atunci bucla se va termina imediat când comanda este executată. Iată un exemplu:”

Exemplu Ieșire:
for (int i = 0; i < 10; i++)
{
System.out.println(i);
if (i > 5)
break;
}
0
1
2
3
4
5

„Se poate folosi break numai în buclă?”

"Da. Instrucțiunea break poate fi folosită numai într-o buclă. Când este executată o instrucțiune break, bucla se termină imediat."

"OK am inteles."

„Genial. Acum al doilea lucru pe care vreau să-l împărtășesc este cuvântul cheie continue. De asemenea, poate fi folosit doar într-o buclă. Când această comandă este executată, începe imediat o nouă iterație a buclei. Cu alte cuvinte, orice cod rămas în buclă. corpul buclei este pur și simplu omis.”

„Iată un exemplu:”

Exemplu Ieșire:
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
continue;
System.out.println(i);
}
1
3
5
7
9

„Deci, odată ce programul ajunge la o comandă continue într-o buclă, se oprește executarea codului în buclă?”

"Nu. Uite, avem o buclă când executăm același cod de mai multe ori. În exemplul de mai sus, avem o buclă de la 0 la 9, adică corpul buclei va fi executat de 10 ori. Nu?"

"Da."

"O trecere prin corpul buclei se numește iterație. Bucla noastră constă din 10 iterații - corpul buclei va fi executat de zece ori."

— Da, e clar.

„ Comanda continue termină prematur iterația curentă, adică orice cod rămas în buclă este omis și începe o nouă iterație.”

„Iată un alt exemplu:”

Exemplu
ArrayList list = new ArrayList();
for (Object o: list)
{
if (o == null) continue;
System.out.println(o.toString());
}

„În acest exemplu, afișăm o reprezentare șir a tuturor obiectelor din listă. Dar omitem orice obiecte care sunt nule.”

"OK, am înțeles. Văd cât de convenabil este asta."

„Da. Vreau să vă spun și despre etichete. Ele sunt rareori folosite în Java, pentru că adesea încalcă frumusețea logicii unui program. Dar s-ar putea să le întâlniți în cod la un moment dat. Așa că aș prefera să vă spun despre ei decât ai auzit despre ei pe terenul de joacă.”

„Odinioară era permis să săriți de la orice linie la orice linie din cod. Am făcut acest lucru folosind etichete și instrucțiunea goto. Iată cum arată:”

Cod oribil cu etichete
System.out.println("Make cookies,");
label: System.out.println("not");
System.out.println("war");
goto label;

„În acest exemplu, după ce comanda goto label este executată, programul sare la linia marcată label .

„Mai târziu, toată lumea s-a înțeles și a decis să nu folosească declarația goto . Java nu acceptă goto, dar goto este un cuvânt rezervat. Nu e mare lucru…”

„Deci, fără goto și fără etichete în Java?”

„Nu există nicio declarație goto, dar există etichete!”

"Cum poate fi asta?"

„În Java, etichetele pot fi folosite cu comenzile continue și break. Sunt folosite atunci când aveți multe bucle imbricate.”

„De exemplu, să presupunem că aveți 5 bucle imbricate și când o anumită condiție este îndeplinită, doriți să ieșiți din trei dintre ele, dar nu toate. Etichetele sunt o modalitate elegantă de a face acest lucru:”

Exemplu
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;

„În acest exemplu, când se execută instrucțiunea break, ieșim nu din bucla cu variabila k, ci din bucla etichetată label2 - adică ieșim imediat din cele două bucle cu k și j.”

„Cât de des este folosit?”

"Ca să fiu sincer, nu des, dar nu se știe niciodată. Poate o vei vedea cândva. Acestea sunt elementele fundamentale ale sintaxei - trebuie să știi toate acestea!"

— OK. Mulţumesc, Bilaabo.