Istruzione If in MATLAB
Negli script e funzioni che abbiamo realizzato nei capitoli precedenti di questa guida, abbiamo sempre scritto codice che viene eseguito sequenzialmente dall'inizio alla fine.
Esistono situazioni in cui, però, potrebbe essere necessario eseguire un blocco di codice solo se una determinata condizione è vera. Per fare ciò, possiamo utilizzare l'istruzione condizionale if
in MATLAB.
Istruzione if
L'istruzione if
è una delle istruzioni condizionali più semplici e comuni in MATLAB. L'istruzione if
permette di eseguire un blocco di codice solo se una condizione è vera.
La sintassi generale dell'istruzione if
è la seguente:
if condizione
istruzione1
...
istruzioneN
end
Nel codice di sopra condizione
rappresenta un'espressione relazionale che risulta concettualmente o logicamente vera o falsa.
Quando MATLAB incontra un'istruzione if
, dapprima valuta la condizione.
Se la condizione risulta vera, tutte le istruzioni racchiuse tra l'istruzione if
e la successiva istruzione end
verranno eseguite. In caso contrario, l'esecuzione riprende all'istruzione immediatamente successiva all'istruzione end
.
L'indentazione, ossia l'inserimento di spazi o tabulazioni all'inizio di una riga di codice, non è strettamente necessaria. Infatti, MATLAB capisce quali istruzioni fanno parte del blocco if
grazie alla presenza delle parole chiave if
e end
. Tuttavia, è sempre buona prassi indentare il codice per renderlo più leggibile.
Ad esempio, il codice che segue controlla il valore di una variabile numero
e, se quest'ultimo è minore di zero, imposta la variabile a zero:
numero = input('Inserisci un numero: ');
if numero < 0
numero = 0;
end
fprintf('Il numero è: %d\n', numero);
Le istruzioni if
hanno senso di essere utilizzate specialmente all'interno di script e di funzioni definite dall'utente per controllare il flusso di esecuzione del codice.
Tuttavia, possono essere anche inserite all'interno del prompt interattivo di MATLAB per eseguire operazioni condizionali in tempo reale. In tal caso, il prompt attende che l'utente inserisca anche l'istruzione end
per eseguire il blocco di codice.
Vediamo un esempio:
>> numero = input('Inserisci un numero: ')
Inserisci un numero: -5
numero = -5
>> if numero < 0
numero = 0;
end
>> numero
numero = 0
Nell'esempio di sopra, quando inseriamo l'istruzione if
, il prompt attende che l'utente inserisca prima tutte le istruzioni contenute nel blocco if
. Solo quando l'utente inserisce end
, MATLAB esegue il blocco di codice.
Ricapitolando:
Istruzione condizionale if
in MATLAB
In MATLAB l'istruzione if
permette di eseguire un blocco di codice solo se una condizione è vera. La sintassi generale è la seguente:
if condizione
istruzione1
...
istruzioneN
end
condizione
può essere una qualunque espressione logica.- Le istruzioni racchiuse tra
if
eend
verranno eseguite solo se la condizione è vera.
Esempio: costruzione di un vettore
Vediamo un esempio di applicazione dell'istruzione if
. Supponiamo di voler realizzare una funzione in MATLAB che prende due valori, vmin
e vmax
, e restituisca in output un vettore contenente i valori equispaziati di 1 tra vmin
e vmax
.
Potremmo costruire la nostra funzione semplicemente in questo modo:
function vec = creavettore(vmin, vmax)
vec = vmin:1:vmax;
end
Tuttavia, la funzione così scritta ha un problema. Infatti, se vmin
è maggiore di vmax
, la funzione restituirà un vettore vuoto. Per evitare questo problema, possiamo utilizzare l'istruzione if
per controllare se vmin
è maggiore di vmax
e, in tal caso, invertire i due valori.
function vec = creavettore(vmin, vmax)
if vmin > vmax
temp = vmin;
vmin = vmax;
vmax = temp;
end
vec = vmin:1:vmax;
end
Da notare che per scambiare i due valori vmin
e vmax
abbiamo adoperato una variabile temporanea temp
.
Proviamo ad utilizzare la nostra funzione:
>> creavettore(5, 10)
ans =
5 6 7 8 9 10
>> creavettore(10, 5)
ans =
5 6 7 8 9 10
Come possiamo vedere, la funzione creavettore
restituisce correttamente un vettore equispaziato tra vmin
e vmax
, indipendentemente dall'ordine in cui vengono passati i due valori.
Condizioni Logiche
Abbiamo detto che un'istruzione if
esegue un blocco di codice solo se una condizione è logicamente o concettualmente vera.
In generale, se la condizione dell'istruzione if
è un'espressione logica, il suo risultato sarà di tipo logical
e potrà assumere solo due valori: true
o false
.
Tuttavia, come condizione dell'istruzione if
, possiamo anche usare altre espressioni che non siano logiche. Infatti, in MATLAB le regole delle condizioni logiche sono:
- Un valore pari a zero viene sempre considerato
false
; - Un qualunque valore diverso da zero viene considerato
true
.
Pertanto, il codice che segue è perfettamente valido:
if 5
disp('Il numero 5 è considerato vero');
end
Infatti, 5 essendo diverso da zero viene considerato equivalente a true
.
In base a questa regola, se vogliamo scrivere un'istruzione if
che controlli se una variabile x
è diversa da zero, possiamo scrivere:
if x
disp('x è diverso da zero');
end
Condizioni logiche in MATLAB
Quando un'espressione viene utilizzata come condizione logica all'interno di un'istruzione if
, le regole di valutazione sono:
- Un valore pari a zero viene considerato
false
; - Un valore diverso da zero viene considerato
true
.
Usare sempre espressioni logiche
Sebbene sia possibile utilizzare espressioni non logiche come condizioni di un'istruzione if
, è sempre buona prassi utilizzare espressioni logiche per rendere il codice più chiaro e leggibile.
Ad esempio, anche se valido, è sempre meglio evitare di scrivere:
if x
disp('x è diverso da zero');
end
e preferire:
if x ~= 0
disp('x è diverso da zero');
end
Il secondo codice è più chiaro e rende esplicito il fatto che stiamo controllando se x
è diverso da zero.
In Sintesi
In questa lezione abbiamo visto come utilizzare l'istruzione condizionale if
in MATLAB per controllare il flusso di esecuzione del codice. Abbiamo imparato che:
- L'istruzione
if
permette di eseguire un blocco di codice solo se una condizione è vera; -
La sintassi generale dell'istruzione
if
è:if condizione istruzione1 ... istruzioneN end
-
Le istruzioni racchiuse tra
if
eend
vengono eseguite solo se la condizione è vera; - Possiamo utilizzare espressioni non logiche come condizioni di un'istruzione
if
. In tal caso qualunque valore diverso da 0 è considerato vero. Tuttavia è sempre meglio utilizzare espressioni logiche per rendere il codice più chiaro e leggibile.
Nella prossima lezione vedremo come utilizzare l'istruzione if-else
per eseguire un blocco di codice alternativo nel caso in cui la condizione sia falsa.