ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Comandi
Comandi
if
switch
fall-through
while
do-while
for
interruzioni
label
return
eccezioni
Stringhe/Array
Array
Caratteristiche
Creazione
Stringhe

<<< for >>>
Comando di ciclo for
Simile al while

Il comando di ciclo for è in pratica una variante del ciclo while usata solitamente per cicli di lunghezza determinata. La sintassi è la seguente:

for(<inizio>; 
    <condizione>; 
    <incremento>) 
        <comando>

Si nota che comprende tre diverse espressioni: una di inizializzazione, una di incremento e una di condizione. Vediamo esattamente cosa fanno e perchè.

Per prima cosa viene eseguita l'espressione di <inizio>

L'espressione iniziale viene valutata una volta sola, all'inizio del ciclo. In realtà si tratta di una espressione speciale perchè può anche essere una dichiarazione. Ovvero posso scrivere for(int i=0; ... ; ...). La cosa curiosa è che la variabile i dichiarata "vive" fino alla fine del blocco che segue il for.

Un'altra cosa curiosa a proposito dell'inizializzazione del for è il fatto che posso inizializzare in serie più di una variabile. È sufficiente cioè che scrivo una serie di dichiarazioni, separandole da virgole. È legale quindi for(int i=0, int j=1, int k=2; ... ; ...). Si tratta comunque di un caso particolare speciale. In C esiste l'operatore ',' che invece non c'è in Java. Solo nell'inizializzazione del ciclo for (e in pochi altri casi) si può usare la virgola, mentre in C si può usare in ogni espressione.

Poi viene valutata la <condizione>

La condizione successiva al ciclo for è invce una condizione in senso stretto. Deve essere una espressione strettamente booleana e non sono ammesse variazioni.

Qusta espressione viene valutata dopo aver effettuato l'inizializzazione ma prima di eseguire il comando che segue il for. È l'espressione di controllo del ciclo ed è del tutto analoga all'espressione di controllo di ciclo del ciclo while. In particolare vale la regola che l'espressione di controllo del ciclo può essere immediatamente falsa e quindi il corpo del ciclo non venire mai eseguito. L'inizializzazione viene però sempre comunque eseguita.

Viene eseguito il <comando>

Dopo che sono stati fatti i preliminari, si esegue il corpo del ciclo. Una volta che termina il comando non è però finita lì.

Viene eseguita l'espressione di <incremento>

L'espressione di incremento viene eseguita DOPO che è stato eseguito il corpo del ciclo. E può succedere che non venga eseguita mai. Questo nel caso l'espressione risulti falsa. L;'espressione di incremento viene comunque eseguita dopo il corpo, ma viene posta nell'intestazione del ciclo per raggruppare concettualmente tutti i passi che servono per eseguire un ciclo. A questo punto possiamo considerare un caso complessivo:



int s=0; for(int i=1; i<=10; i++) s+=i;

In questo caso stiamo sommando i numeri da 1 a 10. Il ciclo va da 1 a 10. La prima volta si crea i, si pone a uno, e si controlla se per caso non sia già arrivata a 10. A questo punto si esegue il corpo del ciclo, ovvero s+=i, e DOPO l'incremento. Gli operatori ++, += e simili sono stati creati essenzialmente proprio per coprire questo caso, usandoli nell'espressione di incremento del ciclo, dove normalmente si lavora con incrementi e assegnazioni alla stessa variabile.
Notare infine che, sapendo che la variabile di controllo "muore" alla fine del ciclo, ho dichiarato s prima del ciclo, in modo che sia ancora esistente dopo (e quindi ne posso usare il valore da qualche parte).

Simile (ma non uguale) a:
<inizio>; 
while(<condizione>) { 
  <comando>; 
  <incremento>; 
}

Il ciclo for può essere riscritto in termini di un ciclo while, come mostrato in figura. Si comporta in maniera molto simile ma non uguale al 100%. Una prima differenza sta nel fatto che nel ciclo scritto come un while la variabile di controllo del ciclo esiste ancora dopo il ciclo, mentre con il for questo non accade. La seconda differenza è più sottile e ha a che fare con le interruzioni di ciclo che vediamo nel prossimo paragrafo.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com