CodeGym /Corsi /C# SELF /L'operatore ternario in C#: condizioni compatte e partico...

L'operatore ternario in C#: condizioni compatte e particolarità

C# SELF
Livello 3, Lezione 5
Disponibile

1. Espressioni vs Istruzioni

In C# tutte le istruzioni si dividono in due categorie: istruzioni (Statement) ed espressioni (Expression). Di solito si dice che un'istruzione viene eseguita, mentre un'espressione viene valutata. Ma non è questa la cosa principale.

La differenza principale: un'espressione ha un risultato. Questo risultato ha un tipo, e puoi assegnarlo a una variabile o usarlo in un'altra espressione.

Esempi:

Codice Note
int x;
Istruzione
(a < 10)
Espressione, tipo bool
i++;
Espressione, tipo uguale a quello della variabile i
x = 5;
Espressione, tipo uguale a quello della variabile x

Cosa ci dà tutto questo?

Molte istruzioni in realtà sono espressioni (hanno un risultato). Ad esempio, questo codice funziona:
int x, y, z;
x = y = z = 1; 	// x = (y = (z = 1));
Puoi ignorare il risultato di un'espressione se non ti serve:
Console.ReadLine();	// ignoriamo il risultato dell'input

È comodo se l'espressione, oltre al risultato, fa anche qualcosa di utile (ad esempio stampa a schermo o legge un input).

2. Operatore ternario

In C# c'è un operatore ternario (triplo) speciale. Sembra una versione compatta dell'operatore if–else:


Condizione ? Espressione1 : Espressione2;
Sintassi dell'operatore ternario

Se Condizione è vera, viene valutata Espressione1, altrimenti Espressione2. Dopo la condizione va ?, e le due espressioni sono separate da :.

La differenza principale rispetto a if-else: l'operatore ternario è un'espressione, il suo risultato può essere assegnato a una variabile o usato in altre espressioni.

Per esempio, calcoliamo il minimo tra due numeri:

int a = 2;
int b = 3;
int min = a < b ?  a :  b;

Oppure assegniamo valori diversi a una variabile in base a una condizione:


int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;
Classico if-else

Stessa cosa con l'operatore ternario:


int age = 25;
int money = age > 30 ? 100 : 50;
Operatore ternario — scrittura compatta

Cosa è meglio usare: if-else o l'operatore ternario? In termini di velocità non cambia nulla, ma l'operatore ternario è ottimo per condizioni brevi. Se il codice non sta su una riga — meglio usare if-else per la leggibilità.

3. Particolarità d'uso

Tipi dei valori
Entrambi i rami dell'operatore ternario (<valore_se_vero> e <valore_se_falso>) devono essere dello stesso tipo o compatibili (ad esempio, entrambi string o entrambi int).

Funziona:

int a = 10, b = 20;
int max = (a > b) ? a : b; // entrambi i rami sono int

Errore di compilazione:

int a = 10, b = 20;
// string e int non sono compatibili
string result = (a > b) ? "maggiore" : 0; // Errore di compilazione

Versione corretta:

int a = 10, b = 20;
string result = (a > b) ? "maggiore" : "minore o uguale";

Esempio: lavoro con i numeri

int number = -5;
int abs = (number >= 0) ? number : -number;
Console.WriteLine(abs); // 5

4. Integrare l'operatore ternario in un'applicazione

Scriviamo una piccola app di dialogo: oltre al saluto, il programma dirà all'utente quanti anni avrà tra un anno e specificherà se sarà maggiorenne.

Console.Write("Inserisci il tuo nome: ");
string name = Console.ReadLine();

Console.Write("Inserisci la tua età: ");
string ageText = Console.ReadLine();
int age = int.Parse(ageText);

int nextYear = age + 1;
string status = (nextYear >= 18) ? "maggiorenne" : "minorenne";

Console.WriteLine($"Ciao, {name}! L'anno prossimo avrai {nextYear} anni. Sarai {status}.");

Spieghiamo i dettagli:

  • La variabile status viene calcolata tramite l'operatore ternario: se l'età tra un anno è almeno 18, allora l'utente sarà maggiorenne (o lo resterà).
  • L'operatore ternario si integra facilmente anche nelle stringhe (ad esempio con l'interpolazione $"").

5. Operatori ternari annidati — occhio!

L'operatore ternario può essere annidato (in ogni ramo può esserci un altro ternario). Ma... di solito fa venire il mal di testa, soprattutto a chi leggerà il codice dopo di te (anche se sei tu tra 2 giorni).

Esempio: determinare la categoria in base all'età

string category = (age < 7) ? "prescolare" :
                  (age < 18) ? "scolaro" :
                  (age < 65) ? "adulto" : "pensionato";

Tabella delle decisioni:

Età Condizione Risultato
< 7 age < 7 prescolare
7–17 age < 18 scolaro
18–64 age < 65 adulto
65 e oltre altrimenti pensionato

Questo codice si può ancora leggere, ma se la logica è più complessa — meglio usare if-else if-else.

6. Lifehack: operatore ternario e tipo bool

A volte si vede questo codice:

bool adult = (age >= 18) ? true : false;

Ma è ridondante. L'espressione (age >= 18) restituisce già un bool. Quindi puoi semplicemente scrivere:

bool adult = (age >= 18);
2
Compito
C# SELF, livello 3, lezione 5
Bloccato
Uso semplice dell'operatore ternario
Uso semplice dell'operatore ternario
2
Compito
C# SELF, livello 3, lezione 5
Bloccato
Categoria di età
Categoria di età
1
Sondaggio/quiz
Operatore condizionale, livello 3, lezione 5
Non disponibile
Operatore condizionale
Operatore condizionale
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION