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:

Definizione

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 e end 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
Definizione

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.
Nota

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 e end 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.