Ciclo for
Nei linguaggi di programmazione o di scripting, il ciclo for
è una struttura di controllo iterativa che determina l'esecuzione di una porzione di programma ripetuta per un certo numero noto di volte. Si distingue in questo modo dal ciclo while
, in cui la ripetizione delle istruzioni avviene semplicemente finché è valida una determinata condizione, pertanto il numero di ripetizioni necessario può non essere conosciuto a priori (in questo caso il ciclo può anche non venire mai eseguito, nel caso in cui la condizione in questione non fosse verificata quando viene controllata per la prima volta). La scelta fra questi due tipi di ciclo è legata a considerazioni di leggibilità e chiarezza del codice; in linea di principio, infatti, qualunque algoritmo che impieghi un ciclo for
può essere trascritto in una forma che usa solo il ciclo while
, e viceversa.
Quasi tutti i linguaggi di programmazione hanno un'implementazione per un ciclo for
; un ciclo di questo genere è presente in praticamente tutti i linguaggi procedurali e a oggetti, e anche in linguaggi basati su altri paradigmi, come il linguaggio concorrente Occam. Pur con sintassi specifiche che variano da linguaggio a linguaggio, il ciclo for
è in genere riconoscibile da alcuni elementi tipici:
- il ciclo è basato su una variabile contatore, in genere una variabile numerica intera il cui ruolo è tenere traccia del numero di volte che si è eseguito il ciclo;
- il numero di iterazioni previsto per il ciclo è espresso indirettamente, specificando il valore iniziale della variabile contatore ed inserendo una condizione che fa terminare il ciclo quando la variabile contatore raggiunge il valore finale previsto;
- solitamente la variabile contatore viene inizializzata con valore nullo ed incrementata di 1 a ogni iterazione, ma è in genere possibile scegliere a propria discrezione il valore iniziale, il valore finale e l'incremento (detto step); si può anche utilizzare come incremento un numero negativo, ovvero un decremento (in questo caso l'impostazione classica è quella in cui il valore del contatore è inizialmente uguale al numero totale di iterazioni da effettuare e viene ridotto ad ogni esecuzione, con il contatore che conta "a ritroso" ed il ciclo che termina quando il contatore raggiunge il valore 0).
Un esempio in pseudocodice che rappresenta le caratteristiche generali del ciclo for
(mutuato dalla sintassi del BASIC) può essere il seguente, che stampa a video i numeri da 1 a 10. Può essere parafrasato in italiano come: per I che varia da 1 a 10, stampa I.
FOR I=1 TO 10 PRINT I NEXT I
Esempi
[modifica | modifica wikitesto]MATLAB
[modifica | modifica wikitesto]In Matlab la ripetizione di blocchi di istruzioni per un numero di volte specificato e in modo incondizionato viene eseguita tramite l'istruzione di ciclo FOR ...END la cui sintassi è:
for indice = insieme di valori assunti dall'indice; blocco di istruzioni; end
esempio:
for i=1:8
disp(['numero: ',num2str(i)]);
end
RISULTATO:
numero: 1 numero: 2 numero: 3 numero: 4 numero: 5 numero: 6 numero: 7 numero: 8
Python
[modifica | modifica wikitesto]In Python la sintassi è la seguente:
for n in range(1, 100):
print n
Con questo semplice esempio visualizzerete una lista di numeri da 1 a 99.
Pascal
[modifica | modifica wikitesto]In Pascal sono previste due sintassi diverse per i cicli col contatore che viene incrementato o decrementato:
var i : integer;
for i := 1 to 10 do
writeln(i);
var i : integer;
for i := 10 downto 1 do
writeln(i);
Il linguaggio C e i suoi derivati (inclusi per esempio C++ e Java) forniscono una versione generalizzata del ciclo for
, che si può impiegare per descrivere cicli la cui terminazione non è basata semplicemente sul conteggio delle iterazioni eseguite attraverso un contatore, ma richiede anche il soddisfacimento di una certa condizione. La sintassi generale del ciclo for
in C è la seguente:
for(<inizializzazione>; <test>; <incremento>)
<istruzione>;
Dove <inizializzazione>
è una qualsiasi espressione C (nella forma più semplice è l'assegnamento di un valore iniziale al contatore); <test>
è una condizione che dev'essere vera affinché il ciclo continui (nella forma più semplice si tratta di imporre che il contatore non abbia raggiunto il suo valore finale); <incremento>
è una istruzione che viene eseguita al termine di ogni iterazione (nella forma più semplice si tratta dell'incremento del valore del contatore). Un esempio in cui il ciclo for
viene impiegato in modo convenzionale è per esempio il seguente, che stampa a video i valori da 1 a 10:[1]
int i;
for(i = 1; i <= 10; i++)
printf("%d", i);
Questo tipo di ciclo può essere usato per realizzare iterazioni di natura completamente diversa, poiché tutti e tre gli elementi descrittivi dell'iterazione (inizializzazione, test e incremento) possono essere espressi da frammenti di codice C qualsiasi; non è neanche obbligatorio che essi manipolino una variabile contatore.
Java
[modifica | modifica wikitesto]In Java, la variabile contatore (o qualsiasi altra variabile impiegata nel ciclo) può essere dichiarata nella sezione di inizializzazione. L'equivalente Java dell'esempio C precedente potrebbe assumere la seguente forma:
for (int i = 1; i <= 10; i++)
System.out.println(i);
A partire dalla versione 5 di Java è inoltre disponibile la versione detta "generalizzata" del costrutto:
int V[] = {1, 2, 3, 4, 5};
for (int i : V)
System.out.println(i);
Tale forma del costrutto è inoltre disponibile per qualunque classe implementi l'interfaccia Iterable
:
ArrayList<Double> lista = new ArrayList<Double>();
for (Double a : lista)
System.out.println(a);
In questo frammento di codice il ciclo assegna di volta in volta all'oggetto a
il riferimento ad uno degli oggetti (della classe-contenitore Double
) contenuti in lista
istanza della classe ArrayList
che implementa l'interfaccia Iterable.
Visual Basic/Visual Basic .NET
[modifica | modifica wikitesto]For i = 1 To 10
Console.WriteLine("La variabile di controllo vale " & i)
Next
Batch/DOS
[modifica | modifica wikitesto]Dal DOS (o tramite script in batch) può essere spesso utile dover creare un ciclo come questo:
for %%v in (a,e,i,o,u) do (
echo %%v
)
Risultato: saranno visualizzate le vocali a,e,i,o,u.
for /f %%r in (File.txt) do (
echo %%r
)
Risultato: visualizzeremo ogni riga dal file indicato tra parentesi.
Note
[modifica | modifica wikitesto]- ^ La variabile
i
indicata dev'essere stata dichiarata di un tipo intero, come riportato sulla prima riga;i++
è una sintassi tipica del C che incrementa la variabile indicata (equivalente ai=i+1
).
Altri progetti
[modifica | modifica wikitesto]Wikimedia Commons contiene immagini o altri file sul Ciclo for
Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Denis Howe, for loop, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL