Barninga Z
a- a+

Il flusso elaborativo: if else

if... else

L'esecuzione condizionale nella forma più semplice è specificata tramite la parola chiave if, la quale indica al compilatore che l'istruzione seguente deve essere eseguita se la condizione, sempre specificata tra parentesi, è vera. Se la condizione non è verificata, allora l'istruzione non è eseguita e il flusso elaborativo salta all'istruzione successiva. L'istruzione da eseguire al verificarsi della condizione può essere una sola linea di codice, chiusa dal punto e virgola, oppure un blocco di linee di codice, ciascuna conclusa dal punto e virgola e tutte quante comprese tra parentesi graffe. Esempietto: 

if(a == b)
        printf("a è maggiore di b
");
    if(a == c) {
        printf("a è maggiore di c
");
        a = c;
    }

Nel codice riportato, se il valore contenuto in a è uguale a quello contenuto in b viene visualizzata la stringa "a è maggiore di b"; in caso contrario la chiamata a printf() non è eseguita e l'elaborazione prosegue con la successiva istruzione, che è ancora una if. Questa volta, se a è uguale a c viene eseguito il blocco di istruzioni comprese tra le parentesi graffe, altrimenti esso è saltato "a pié pari" e il programma prosegue con la prima istruzione che segue la graffa chiusa. 

Come regola generale, una condizione viene espressa tramite uno degli operatori logici del C ed è sempre racchiusa tra parentesi tonde. 

La if è completata dalla parola chiave else, che viene utilizzata quando si devono definire due possibilità alternative; inoltre più strutture if...else possono essere annidate qualora serva effettuare test su più "livelli" in cascata: 

if(a == b)
        printf("a è maggiore di b
");
    else {
        printf("a è minore o uguale a b
")
        if(a < b)
            printf("a è proprio minore di b
");
        else
            printf("a è proprio uguale a b
");
    }

Quando è presente la else, se la condizione è vera viene eseguito solo ciò che sta tra la if e la else; in caso contrario è eseguito solo il codice che segue la else stessa. L'esecuzione dei due blocchi di codice è, in altre parole, alternativa. 

E' estremamente importante ricordare che ogni else viene dal compilatore riferita all'ultima if incontrata: quando si annidano costruzioni if...else bisogna quindi fare attenzione alla costruzione logica delle alternative. Cerchiamo di chiarire il concetto con un esempio. 

Supponiamo di voler codificare in C il seguente algoritmo: se a è uguale a b allora si controlla se a è maggiore di c. Se anche questa condizione è vera, si visualizza un messaggio. Se invece la prima delle due condizioni è falsa, cioè a non è uguale a b, allora si assegna a c il valore di b. Vediamo ora un'ipotesi di codifica: 

if(a == b)
        if(a > c)
            printf("a è maggiore di c
");
    else
        c = b;

I rientri dal margine sinistro delle diverse righe evidenziano che le intenzioni sono buone: è immediato collegare, da un punto di vista visivo, la else alla prima if. Peccato che il compilatore non si interessi affatto alle indentazioni: esso collega la else alla seconda if, cioè all'ultima if incontrata. Bisogna correre ai ripari: 

if(a == b)
        if(a > c)
            printf("a è maggiore di c
");
        else;
    else
        c = b;

Quella appena vista è una possibilità. Introducendo una else "vuota" si raggiunge lo scopo, perché questa è collegata all'ultima if incontrata, cioè la seconda. Quando il compilatore incontra la seconda else, l'ultima if non ancora "completa" , risalendo a ritroso nel codice, è la prima delle due. I conti tornano... ma c'è un modo più elegante. 

if(a == b) {
        if(a > c)
            printf("a è maggiore di c
");
    }
    else
        c = b;

In questo caso le parentesi graffe indicano chiaramente al compilatore qual è la parte di codice che dipende direttamente dalla prima if e non vi è il rischio che la else sia collegata alla seconda, dal momento che questa è interamente compresa nel blocco tra le graffe e quindi è sicuramente "completa". 

Come si vede, salvo alcune particolarità, nulla diversifica la logica della if del C da quella delle if (o equivalenti parole chiave) disponibili in altri linguaggi di programmazione[1]. 

 



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Redazione
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!