oi esseri mortali, devono prendere sofferte decisioni e svolgere
compiti noiosi e ripetitivi. Dopotutto, i computer sono stati inventati
per liberare gli esseri umani dai lavori ostici e complicati. Non
che ci siano riusciti un granché
ma non divaghiamo. Finora
i nostri esempi sono stati molto semplici e lineari. Uso la parola
lineari per intendere che lordine di esecuzione
delle nostre istruzioni era perfettamente sequenziale: una dopo
laltra, senza nessuna variazione. Nel mondo reale qualunque
programma, Perl o altro, che debba fare più di 2+2 ha bisogno di
fare delle scelte, e di ripetere varie volte dei segmenti di codice.
Per questo, sono state inventate le strutture di controllo.
Un vantaggio sleale
Nella puntata precedente, accennavo al fatto che chi programma in
un altro linguaggio sa già di cosa parlo. Per essere più precisi,
vorrei informare chi programma in C o in Pascal che sa già quasi
tutto quello che occorre, e basterà che legga le puntate su questo
argomento soffermandosi giusto sulle particolarità del Perl. Chi
invece inizia ora, dovrà sudare un po di più :-)
Bivio
Iniziamo dalla struttura più semplice, la cosiddetta struttura condizionale:
serve a spezzare il codice in parti che verranno eseguite solo se
si verificano certe condizioni. Ad esempio, supponiamo di voler
fare una divisione per un numero, e che su questo numero il nostro
programma non abbia alcun controllo, a parte il fatto che gli è
stato messo nella variabile $divisore. Potremmo scrivere:
$quoziente = $dividendo
/ $divisore;
Ma il nostro programma non sa quale valore è stato inserito in $divisore.
Se qualche burlone ci desse uno zero? Visto che dividere per zero
è impossibile per un computer (il concetto di infinito è difficile
da far digerire ad una macchina), il nostro programma si fermerebbe
bruscamente segnalando un errore. La soluzione corretta è questa:
if ($divisore != 0)
{
$quoziente = $dividendo / $divisore;
}
Listruzione if (che significa se in Inglese)
segnala linizio di unistruzione condizionale. Il Perl
valuta lespressione tra parentesi, e se questa è vera procede
ad eseguire le istruzioni che sono poste tra le due parentesi graffe.
La nostra espressione forse vi ha confuso le idee, perché non vi
ho detto che != in Perl significa non uguale,
diverso. Quindi le righe di codice precedenti significano
questo:
Se ($divisore diverso da 0)
{
fai la divisione
}
Chi programma in C farà bene a prendere nota del fatto che le parentesi
graffe sono sempre obbligatorie, anche se cè una sola
istruzione da eseguire, a meno di casi particolari che esporrò in
seguito.
Se la condizione non è rispettata (nel nostro caso, se il divisore
è uguale a zero), le istruzioni comprese tra le parentesi graffe
vengono saltate a piè pari, e lesecuzione del programma riprende
dalla prima istruzione che segue il blocco di istruzioni condizionali.
Blocco è un termine specifico del Perl che denota un gruppo
di istruzioni con una relazione logica tra loro, ad esempio quelle
facenti parte di unespressione condizionale. In seguito userò
spesso la parola blocco per indicare una o più istruzioni
racchiuse tra parentesi graffe.
Ecco la sintassi completa dellistruzione if:
if (espressione)
{
blocco vero
}
else
{
blocco falso
}
Che significa: se lespressione è vera, esegui solo il blocco
di istruzioni associato al valore vero. Se invece è
falsa (else qui significa altrimenti), allora
esegui solo il blocco marcato come falso. In entrambi
i casi, salta il blocco sbagliato e riprendi il programma dopo lultima
parentesi graffa. Tutta la parte dallelse in poi è
opzionale: noi prima non lavevamo messa perché non serviva
a nulla, ma a volte vorrete eseguire una cosa o laltra a seconda
dei casi.
Notate come ho incolonnato le istruzioni, grazie al tasto Tab (quello
subito sopra il Caps Lock, sulla sinistra della tastiera). Allinterprete
Perl ignora quegli spazi bianchi aggiuntivi, ma per chi scrive (e
soprattutto per chi legge) il codice è importante incolonnare bene
i blocchi di codice per mostrare le loro relazioni logiche.
Nella prossima lezione faremo qualche altro esempio su if
e parleremo di altre strutture di controllo.
Torna all'indice Generale del corso di Corso di Perl di Software Planet