1. Loops vergelijken: forvswhile

Een whilelus kan overal worden gebruikt waar een statement of een groep statements meerdere keren moet worden uitgevoerd. Maar van alle mogelijke scenario's is er één de moeite waard om te benadrukken.

We hebben het over de situatie waarin de programmeur (de maker van het programma) van tevoren weet hoe vaak de lus moet worden uitgevoerd. Dit wordt meestal afgehandeld door een speciale tellervariabele te declareren en vervolgens de variabele te verhogen (of te verlagen) met 1elke iteratie van de lus.

Alles lijkt te werken zoals het hoort, maar erg handig is het niet. Voor de lus stellen we de beginwaarde van de tellervariabele in. Vervolgens controleren we in de staat of deze de eindwaarde al heeft bereikt. Maar meestal veranderen we de waarde helemaal aan het einde van de lus.

En wat als het lichaam van de lus groot is? Of als we meerdere geneste lussen hebben? Over het algemeen is het in deze gevallen wenselijk om al deze informatie over tellervariabelen op één plek te verzamelen. En daarom hebben we de forlus in Java. Het ziet er ook niet erg ingewikkeld uit:

for (statement 1; condition; statement 2)
{
   block of statements
}

Een whilelus heeft alleen een voorwaarde tussen haakjes, maar een forlus voegt twee statements toe, gescheiden door puntkomma's.

De realiteit is eenvoudiger dan het klinkt: de compiler zet een forlus whileals volgt om in een gewone lus:

statement 1;
while (condition)
{
   block of statements
   statement 2;
}

Of beter nog, laten we dit aantonen met een voorbeeld. De twee onderstaande codefragmenten zijn identiek.

Optie 1 Optie 2
for (int i = 0; i < 20; i++)
{
   System.out.println(i);
}
int i = 0;
while (i < 20)
{
   System.out.println(i);
   i++;
}

We hebben zojuist alle code verzameld die betrekking heeft op de itellervariabele.

In een forlus wordt instructie 1 slechts één keer uitgevoerd, voordat de lus zelf begint. Dit is duidelijk te zien in het tweede codefragment

instructie 2 wordt hetzelfde aantal keren uitgevoerd als de hoofdtekst van de lus, en elke keer dat deze wordt uitgevoerd nadat de hele hoofdtekst van de lus is uitgevoerd


2. Waar de forlus wordt gebruikt

De forlus is waarschijnlijk het meest gebruikte type lus in Java. Het wordt overal gebruikt, voor programmeurs is het gewoon duidelijker en handiger dan een whilelus. Vrijwel elke whilelus kan worden omgezet in een forlus.

Voorbeelden:

herhalingslus for loop
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
for (int i = 3; i >= 0; i--)
{
   System.out.println(i);
}
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
for (int i = 0; i < 3; i++)
{
   System.out.println(i);
}
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
for (boolean isExit = false; !isExit; )
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
while (true)
   System.out.println("C");
for (; true; )
   System.out.println("C");
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}
for (; true; )
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}

Let op het laatste voorbeeld. De instructies voor het werken met de lusteller ontbreken. Er is geen teller en geen verklaring.

In een forlus kunt u met Java de "instructie om de teller te initialiseren" en de "instructie om de teller bij te werken" weglaten. Zelfs de uitdrukking die de lusvoorwaarde definieert, kan worden weggelaten.



3. Nuances van het gebruik van de forlus

Een belangrijk punt over het gebruik van forloops en breaken continuestatements.

Een breakinstructie in een forlus werkt hetzelfde als in een whilelus: het beëindigt de lus onmiddellijk. Een continueinstructie slaat de lusbody over, maar niet statement 2(waardoor de lusteller verandert).

Laten we nog eens kijken hoe foren whileloops gerelateerd zijn.

for (statement 1; condition; statement 2)
{
   block of statements
}
statement 1;
while (condition)
{
   block of statements
   statement 2;
}

Als een instructie in een continueforlus wordt uitgevoerd , wordt de rest van het blok met instructies overgeslagen, maar instructie 2 (degene die werkt met de forvariabele counter van de lus) wordt nog steeds uitgevoerd.

Laten we terugkeren naar ons voorbeeld met het overslaan van getallen die deelbaar zijn door 7.

Deze code wordt voor altijd herhaald Deze code zal goed werken
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
   i++;
}
for (int i = 1; i <= 20; i++)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
}

De code die de whilelus gebruikt zal niet werken — ik zal nooit groter zijn dan 7. Maar de code met de forlus zal prima werken.



4. Loops vergelijken: Java versus Pascal

Overigens heeft Pascal ook een Forlus. Over het algemeen heeft vrijwel elke programmeertaal er een. Maar in Pascal is het super duidelijk. Voorbeelden:

Pascal Java
For i := 1 to 10 do
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i++)
{
   System.out.println(i);
}
For i := 1 to 10 do step 2
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i = i + 2)
{
   System.out.println(i);
}
For i := 10 downto 0 do step 2
Begin
   Writeln(i);
End;
for (int i = 10; i >= 0; i = i - 2)
{
   System.out.println(i);
}