1. Confronto tra loop: forvswhile

Un whileciclo può essere utilizzato ovunque sia necessario eseguire più volte un'istruzione o un gruppo di istruzioni. Ma tra tutti gli scenari possibili, vale la pena evidenziarne uno.

Stiamo parlando della situazione in cui il programmatore (il creatore del programma) sa in anticipo quante volte deve essere eseguito il ciclo. Questo di solito viene gestito dichiarando una variabile contatore speciale e quindi aumentando (o diminuendo) la variabile a 1ogni iterazione del ciclo.

Tutto sembra funzionare come dovrebbe, ma non è molto conveniente. Prima del ciclo, impostiamo il valore iniziale della variabile contatore. Quindi nella condizione controlliamo se ha già raggiunto il valore finale. Ma di solito cambiamo il valore alla fine del corpo del ciclo.

E se il corpo del loop è grande? O se abbiamo diversi cicli nidificati? In generale, in questi casi è desiderabile raccogliere tutte queste informazioni sulle variabili contatore in un unico posto. Ed è per questo che abbiamo il forciclo in Java. Inoltre non sembra molto complicato:

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

Un whileciclo ha solo una condizione tra parentesi, ma un forciclo aggiunge due istruzioni, separate da punto e virgola.

La realtà è più semplice di quanto sembri: il compilatore converte un forciclo in un normale whileciclo come questo:

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

O meglio, dimostriamolo con un esempio. I due frammenti di codice seguenti sono identici.

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

Abbiamo appena raccolto in un unico posto tutto il codice che riguarda la ivariabile contatore.

In un forciclo, l'istruzione 1 viene eseguita solo una volta, prima che inizi il ciclo stesso. Questo può essere visto chiaramente nel secondo frammento di codice

l'istruzione 2 viene eseguita lo stesso numero di volte del corpo del ciclo e ogni volta che viene eseguita dopo che l'intero corpo del ciclo è stato eseguito


2. Dove forviene utilizzato il ciclo

Il forciclo è probabilmente il tipo di ciclo più utilizzato in Java. È usato ovunque, per i programmatori è solo più chiaro e conveniente di un whileloop. Praticamente qualsiasi whileloop può essere convertito in un forloop.

Esempi:

ciclo while per ciclo
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;
}

Presta attenzione all'ultimo esempio. Mancano le istruzioni per lavorare con il contatore di cicli. Non c'è nessun contatore e nessuna dichiarazione.

In un forciclo, Java ti consente di omettere "l'istruzione per inizializzare il contatore" e "l'istruzione per aggiornare il contatore". Anche l'espressione che definisce la condizione del ciclo può essere omessa.



3. Sfumature dell'uso del forciclo

Un punto importante sull'uso fordi loop breake continueistruzioni.

Un'istruzione breakin un forciclo funziona come in un whileciclo: termina immediatamente il ciclo. Un'istruzione continuesalta il corpo del ciclo, ma non statement 2(il che cambia il contatore del ciclo).

Diamo un'altra occhiata a come fore whilei loop sono correlati.

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

Se un'istruzione continueviene eseguita in un forciclo , il resto del blocco di istruzioni viene saltato, ma l'istruzione 2 (quella che funziona con la forvariabile contatore del ciclo) viene comunque eseguita.

Torniamo al nostro esempio saltando i numeri divisibili per 7.

Questo codice andrà in loop per sempre Questo codice funzionerà correttamente
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);
}

Il codice che usa il whileciclo non funzionerà — i non sarà mai maggiore di 7. Ma il codice con il forciclo funzionerà bene.



4. Confronto per loop: Java vs Pascal

A proposito, anche Pascal ha un Forloop. In generale, praticamente ogni linguaggio di programmazione ne ha uno. Ma in Pascal è super chiaro. Esempi:

Pasquale Giava
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);
}