Espressioni Condizionali in Linguaggio C

In linguaggio C, l'istruzione if permette di effettuare una scelta tra due azioni in base al valore di una condizione.

Il C mette anche a disposizione un'operatore che permette ad un'espressione di produrre un valore tra due possibili in base al valore di una condizione. Tali espressioni prendono il nome di Espressioni Condizionali.

L'operatore condizionale

In linguaggio C esiste un unico operatore ternario, ossia un operatore che accetta tre parametri, chiamato operatore condizionale.

L'operatore condizionale consiste di due simboli, il punto interrogativo ? e i due punti :, che devono essere usati in questo modo:

espressione_1 ? espressione_2 : espressione_3

Le tre espressioni di sopra possono essere espressioni qualunque e l'espressione risultante prende il nome di espressione condizionale.

Il funzionamento dell'operatore condizionale è il seguente:

  1. L'espressione espressione_1 viene valutata;
  2. Se il suo risultato è diverso da 0, quindi risulta vera, viene valutata l'espressione espressione_2 e il risultato dell'intera espressione è quello di espressione_2;
  3. Se il risultato di espressione_1 è 0, quindi risulta falsa, viene valutata l'espressione espressione_3 e il risultato dell'intera espressione è quello di espressione_3.

Per chiarire il tutto, ecco un esempio:

int x, y, z;

x = 10;
y = 20;

z = (x > y) ? x : y; /* z vale adesso 20 */
z = ((x < y) ? x : y) + 20; /* z vale adesso 30 */

Nell'esempio di sopra abbiamo tre variabili, x, y e z. Abbiamo assegnato il valore 10 ad x e il valore 20 ad y.

Successivamente, abbiamo assegnato a z il risultato dell'espressione (x > y) ? x : y. Poiché x è minore di y, l'espressione x > y risulta falsa e quindi z assume il valore di y, ossia 20.

Nella riga successiva, abbiamo assegnato a z il risultato dell'espressione ((x < y) ? x : y) + 10. Poiché x è minore di y, l'espressione tra parentesi ha assunto il valore di x, ossia 10 a cui, poi, sommiamo 20, ottenendo 30.

Un'importante osservazione riguarda la priorità dell'operatore condizionale rispetto agli altri operatori. L'operatore condizionale ha la più bassa priorità tra tutti gli operatori di C, quindi è sempre valutato per ultimo. Per questo motivo, nella seconda assegnazione di z abbiamo usato le parentesi per forzare l'ordine di valutazione.

Se avessimo scritto z = (x < y) ? x : y + 20;, il risultato sarebbe stato diverso, poiché l'operatore + ha una priorità maggiore rispetto all'operatore condizionale. In tal caso, z avrebbe assunto il valore di y + 20, ossia 40.

Ricapitolando:

Definizione

Espressione Condizionale

Un'espressione condizionale è un'espressione che utilizza l'operatore condizionale ? : per valutare una condizione e restituire un valore in base al risultato della condizione.

La sintassi dell'espressione condizionale è la seguente:

espressione_1 ? espressione_2 : espressione_3

Il risultato complessivo dell'espressione condizionale è espressione_2 se espressione_1 è vera, altrimenti è espressione_3.

L'operatore condizionale ha la più bassa priorità tra tutti gli operatori di C ed è l'unico operatore ternario del linguaggio.

Utilizzi delle espressioni condizionali

Le espressioni condizionali rendono il codice sorgente più compatto ma hanno lo svantaggio di rendere il codice meno leggibile.

Esistono casi, tuttavia, in cui possono essere utili, come ad esempio in assegnazioni di variabili o in espressioni matematiche semplici.

Ad esempio, le combinazioni tra printf e l'operatore condizionale possono rendere il codice più semplice. Supponiamo di voler stampare il massimo tra due variabili. Normalmente scriveremmo il codice in questo modo:

if (x > y) {
    printf("Il massimo è %d\n", x);
} else {
    printf("Il massimo è %d\n", y);
}

Con l'operatore condizionale, possiamo scrivere lo stesso codice in modo più compatto:

printf("Il massimo è %d\n", (x > y) ? x : y);

In questo caso, l'espressione (x > y) ? x : y restituisce il massimo tra x e y, che viene poi passato come argomento alla funzione printf.

Le espressioni condizionali possono essere utili anche in espressioni matematiche. Ad esempio, supponiamo di voler calcolare il valore assoluto di un numero. Normalmente scriveremmo il codice in questo modo:

if (x < 0) {
    x = -x;
}

Con l'operatore condizionale, possiamo scrivere lo stesso codice in modo più compatto:

x = (x < 0) ? -x : x;

In Sintesi

Le espressioni condizionali sono un costrutto potente di C che permette di valutare una condizione e restituire un valore in base al risultato della condizione. L'operatore condizionale è l'unico operatore ternario di C e ha la più bassa priorità tra tutti gli operatori del linguaggio.

Le espressioni condizionali possono essere utili per rendere il codice più compatto e leggibile in determinate situazioni, ma è importante utilizzarle con parsimonia per non compromettere la leggibilità del codice.