Il ciclo for
Introduciamo adesso il ciclo per eccellenza, cioè il ciclo for.
In realtà non è che ci sia poi tantissimo da dire, anzi... per chi
programma già in C non cè proprio niente di nuovo: il ciclo
for del Perl è identico a quello del C. Per i non iniziati,
ecco come funziona:
for ( $i=1 ; $i <= 10
; $i = $i +1)
{
print $i \n;
}
La parola chiave for è seguita da una serie di 3 espressioni
racchiuse in una parentesi, separate da punti e virgola. La prima
espressione viene eseguita solo una volta, quando viene incontrata
lespressione for. Quindi inizia il ciclo.
Allinizio di ogni ciclo, viene valutata la seconda espressione:
se questa è vera, il blocco di istruzioni viene eseguito, e poi
viene eseguita la terza espressione. E si ricomincia, valutando
la seconda espressione.
Se ad un certo punto la seconda espressione non è più vera, il ciclo
termina.
Quindi, il nostro ciclo di esempio produrrà questa serie di operazioni:
- assegna 1 a $i
- $i è minore o uguale a 10? Sì, perciò esegui il blocco
- scrive $i (1) sullo schermo
- incrementa $i di 1 (adesso $i contiene 2)
- $i è minore o uguale a 10? Sì, perciò ripeti il blocco
- scrive $i (2) sullo schermo
- incrementa $i di 1 (adesso $i contiene 3)
- $i è minore o uguale a 10? Sì, perciò ripeti il blocco
- scrive $i (3) sullo schermo
.......
- incrementa $i di 1 (adesso $i contiene 11)
- $i è minore o uguale a 10? No, esci dal ciclo
Perciò vediamo come il nostro ciclo for di esempio scrive
sullo schermo i numeri da 1 a 10, e poi esce.
E in pratica uguale al seguente ciclo while:
$i=1;
while ($i<=10)
{
print $i \n;
$i = $i+1;
}
Non cè differenza tra i due cicli, potete scegliere quello
che preferite. Lesempio di ciclo for che abbiamo visto
è uno dei più classici: una variabile contatore che viene incrementata
fino ad un certo limite. Niente però vieta di scrivere cose completamente
diverse nelle tre espressioni. Ci sono programmatori che riescono
a condensare nelle tre espressioni anche tutto il resto del blocco,
cosa che in informatica si avvicina molto alla perversione...
In Perl, il ciclo for non è molto usato. Più che altro è
presente per gli ex-programmatori C, che in questo modo possono
scrivere velocemente i loro script senza dover imparare altre cose.
Cè invece un ciclo diverso, specifico del Perl e più potente:
Il ciclo foreach
In realtà, nel Perl le parole chiave for e foreach sono
sinonimi, e potete usare quella che volete. Nella pratica, è meglio
usare for per i cicli che ho illustrato nel paragrafo precedente,
per similarità con gli altri linguaggi, e foreach per il
modo particolare in cui il Perl esegue questo ciclo:
foreach $var (@list)
{
blocco;
}
Nel ciclo foreach, il blocco interno di istruzioni viene
eseguito una volta per ogni elemento dellarray @list,
che deve essere messo tra parentesi. Ad ogni iterazione, la variabile
$var prende il valore di quel particolare elemento.
Ad esempio:
foreach $i (1..10)
{
print $i \n;
}
Questo ciclo foreach fa la stessa identica cosa del ciclo
for di esempio di prima: scrive sullo schermo i numeri da
1 a 10. Infatti tra parentesi costruiamo un array al volo, grazie
alloperatore range ..(che abbiamo illustrato
nella lezione 7). I valori di questo array vengono messi nella variabile
$i uno alla volta, e ogni volta viene eseguito il blocco
di istruzioni interno.
La variabile che tiene il conto è opzionale. Se non
è specificata, il valore viene assegnato alla variabile $_
(dollaro + sottolineato). Questa variabile nel Perl è speciale,
nel senso che dovunque venga omesso largomento di una funzione,
viene usata $_. Cioè:
foreach (1..10)
{
print;
}
fa la stessa cosa di prima (a parte i ritorni a capo, che ci interessano
non poco!). Infatti, così come foreach si aspettava una variabile
e non cè niente (e perciò viene usata $_), anche print
si aspetta perlomeno una variabile da stampare, e visto che non
diciamo nulla prende di nuovo $_.
In futuro sfrutteremo molto spesso questa proprietà di $_, per adesso
tenetela a mente.
Nella prossima lezione vedremo come applicare foreach al
nostro programma delle altezze.
Torna all'indice Generale del corso di Corso di Perl di Software Planet