|
La prima e più
elementare struttura di controllo è la if-else. Permette di
modificare il flusso delle istruzioni del programma a seconda che
una certa condizione sia o meno verificata.
La sintassi dell'istruzione è la seguente:
if ( condizione) {
primo blocco di istruzioni
} else {
secondo blocco di istruzioni
}
Se la condizione è vera allora viene eseguito il primo blocco di
istruzioni racchiuso tra parentesi graffe, altrimenti viene eseguito
il secondo blocco di istruzioni. Al termine di ognuno dei due
blocchi il flusso del programma riprende con le istruzioni presenti
dopo la chiusura dell'ultima parentesi graffa.
Il blocco else può essere omesso:
if ( condizione) {
blocco di istruzioni
}
In questo caso se la condizione è verificata allora viene eseguito
il blocco di istruzioni riportato tra parentesi graffe, quindi
l'esecuzione del programma continuerà con le istruzioni che seguono
la parentesi graffa chiusa; se invece la condizione risulta falsa
allora il blocco di istruzioni tra parentesi graffe non viene
eseguito ed il programma continua semplicemente saltando il blocco.
La struttura di controllo if ha alcune interessanti variazioni che
rendono in certi casi più sintetico il programma. Ad esempio è
possibile utilizzare la notazione post-fissa:
istruzione if condizione;
In questo caso l'istruzione (singola) viene eseguita solo se è
verificata la condizione (che con la notazione post-fissa può non
essere racchiusa tra parentesi tonde).
Un altro modo di utilizzare una struttura di controllo simile alla
if è, come accennavo precedentemente, quello di sfruttare il fatto
che l'esecuzione di ogni istruzione in Perl restituisce un valore
che può essere interpretato come vero o falso.
Supponiamo quindi di voler eseguire l'istruzione istruz2 solo se
l'istruzione istruz1 va a buon fine (restituisce un valore vero);
potremo allora utilizzare l'operatore AND e concatenare le due
istruzioni con la seguente espressione:
istruz1 && istruz2;
L'espressione appena vista equivale a scrivere
if ( istruz1) {
istruz2;
}
Viceversa se si vuole eseguire l'istruzione istruz2 solo se
l'istruzione istruz1 restituisce un valore falso, potremo utilizzare
la seguente espressione:
istruz1 || istruz2;
che equivale alla struttura canonica:
if ( ! istruz1) {
istruz2;
}
Cerchiamo di chiarire meglio questo comportamento assai interessante
del Perl, ma piuttosto insolito se confrontato con altri linguaggi
di programmazione.
Innanzi tutto negli esempi precedenti abbiamo utilizzato una
istruzione al pari di una espressione logica. La differenza tra
questi due oggetti è piuttosto marcata: una istruzione serve per
compiere una determinata operazione (scrivere qualcosa sul canale di
output, eseguire una operazione matematica, eseguire una operazione
su una stringa di caratteri, ecc.), mentre una espressione logica è
un oggetto che in base al valore logico (vero o falso) delle sue
componenti ci fornisce un valore logico (vero o falso). In Perl però
le due cose si confondono visto che ogni istruzione restituisce
comunque un valore che può essere interpretato in termini logici,
ossia in termini di ``vero o falso''.
Quindi non è sbagliato utilizzare una istruzione come operatore
logico che ci premette di compiere una decisione.
In secondo luogo è importante capire il modo in cui il Perl valuta
le espressioni logiche. Come per ogni espressione si parte da
sinistra e si procede verso destra nella valutazione delle
componenti; le parentesi servono a stabilire priorità diverse da
quelle standard. Inoltre, per ottimizzare i tempi di esecuzione, il
Perl interrompe la valutazione di una espressione logica non appena
è in grado di stabilirne il valore di vero o falso.
Quindi nel caso di una espressione del tipo ``A AND B'' (in Perl
scriveremo ``A && B'') se dopo aver valutato l'espressione logica A
si ottiene un valore falso, allora il Perl non valuterà
l'espressione B, visto che questa operazione risulterebbe comunque
inutile al fine della valutazione dell'espressione ``A AND B''
(l'operatore logico AND restituisce vero se e solo se entrambi i
termini sono veri). L'espressione B verrà quindi valutata solo se
l'espressione A risulta vera.
Viceversa nella valutazione dell'espressione logica ``A OR B'' se il
termine A risulta vero allora il Perl non valuterà il termine B,
visto che comunque basta che uno dei due termini sia vero per
stabilire il valore (vero) dell'intera espressione. Se il termine A
risulta falso allora il Perl non essendo ancora in grado di
stabilire il valore dell'intera espressione ``A OR B'' e quindi
procederà alla valutazione anche del secondo termine.
Lezione
successiva =>
Torna
all'indice
|