1. Operatore if else
Le app sarebbero poco utili se facessero sempre la stessa cosa, indipendentemente da come cambiano le circostanze esterne. Un programma deve sapersi adattare a situazioni diverse e fare certe cose in certi casi, altre in altri.
In C# questo si fa con l'operatore condizionale — una parola chiave speciale che ti permette di eseguire diversi blocchi di comandi a seconda che la condizione sia vera o falsa.
L'operatore condizionale è composto da tre parti: condizione, comando 1 e comando 2. Se la condizione è vera, viene eseguito il comando 1, altrimenti viene eseguito il comando 2. I comandi non vengono mai eseguiti insieme. Ecco la forma generale di questo operatore:
if (condizione)
comando1;
else
comando2;
if-else
if si traduce come "se", mentre else come "altrimenti". In linguaggio umano sarebbe così:
Se condizione è vera, allora
esegui comando1;
altrimenti
esegui comando2;
if-else in linguaggio umano
Esempi:
//Sul display verrà mostrata la scritta: Sei ancora un bambino
int age = 17;
if (age < 18)
Console.WriteLine("Sei ancora un bambino");
else
Console.WriteLine("Sei già adulto");
//Sul display verrà mostrata la scritta: Caldo
int temperature = 5;
if (temperature < 0)
Console.WriteLine("Fuori fa freddo");
else
Console.WriteLine("Caldo");
//Sul display verrà mostrata la scritta: Puoi fare l'esame per la patente
int age = 18;
if (age == 18)
Console.WriteLine("Puoi fare l'esame per la patente");
else
Console.WriteLine("Puoi risparmiare per la macchina");
2. Blocco di comandi
Se vuoi che il tuo programma esegua più comandi quando una condizione è vera (o falsa), puoi unirli in un blocco di comandi.
Per unire i comandi in un blocco, devi "avvolgerli" tra parentesi graffe. Ecco come si presenta in generale:
{
comando1;
comando2;
comando3;
}
Nel blocco puoi mettere quanti comandi vuoi. Anche zero.
Esempi di combinazione tra operatore if-else e blocco di comandi:
//Sul display verrà mostrata la scritta: Sei ancora un bambino. Non discutere con gli adulti
int age = 17;
if (age < 18)
{
Console.WriteLine("Sei ancora un bambino");
Console.WriteLine("Non discutere con gli adulti");
}
else
{
Console.WriteLine("Sei già adulto");
Console.WriteLine("Eh, questa gioventù di oggi");
}
//Sul display verrà mostrata la scritta: Caldo
int temperature = 5;
if (temperature < 0)
{
Console.WriteLine("Fuori fa freddo");
Console.WriteLine("Metti il cappello");
}
else
Console.WriteLine("Caldo");
//Verrà eseguito un blocco di comandi vuoto. Non verrà mostrato nulla sul display.
int age = 21;
if (age == 18)
Console.WriteLine("Presentati al distretto militare");
else
{
}
3. Sintassi abbreviata dell'operatore if
Se il blocco else non c'è, puoi semplicemente non scriverlo. L'operatore if sarà così:
if (condizione)
comando1;
if
Esempio:
int age = 19;
if (age >= 18)
{
Console.WriteLine("Sei maggiorenne!");
}
Come funziona?
Se la condizione è vera, viene eseguito il blocco di codice. Se è falsa, non succede nulla — il programma va avanti.
Il blocco else c'è, ma è vuoto (tra le parentesi graffe non c'è nessun comando). Puoi semplicemente toglierlo: non cambierà nulla nel programma.
4. Combinare condizioni: else if
A volte devi controllare non solo "sì/no", ma scegliere tra più opzioni. Qui entra in gioco la combinazione else if:
if (condizione1)
{
// Eseguito se condizione1 è vera
}
else if (condizione2)
{
// Eseguito se condizione2 è vera e condizione1 è falsa
}
else
{
// Eseguito se nessuna delle condizioni sopra è vera
}
Esempio:
int hour = 13;
if (hour < 12)
{
Console.WriteLine("Buongiorno!");
}
else if (hour < 18)
{
Console.WriteLine("Buon pomeriggio!");
}
else
{
Console.WriteLine("Buonasera!");
}
Cosa succede qui?
- Se l'ora è prima delle 12 — mattina.
- Se tra le 12 e le 18 — pomeriggio.
- Se dopo — sera.
- Il programma sceglie solo UNA delle opzioni! Appena trova una condizione vera — le altre non vengono nemmeno controllate.
5. Illustrazione schematica: diagramma di flusso della ramificazione
Ecco come appare in un diagramma di flusso:
E se ci sono più condizioni:
È molto simile alle scelte nei giochi di ruolo da tavolo: vai a sinistra — una cosa, a destra — un'altra, dritto — ancora un'altra!
6. Quali condizioni puoi controllare?
Dentro le parentesi tonde dopo if ci deve essere un'espressione LOGICA — il cui risultato è true oppure false.
Operatori di confronto principali:
| Operatore | Significato | Esempio |
|---|---|---|
| == | Uguale | x == 5 |
| != | Diverso | x != 10 |
| > | Maggiore | x > 0 |
| < | Minore | age < 18 |
| >= | Maggiore o uguale | score >= 100 |
| <= | Minore o uguale | count <= 50 |
Esempi di condizioni:
if (number == 10)
if (age != 18)
if (temperature > 36)
if (balance <= 0)
Nota: = (un solo segno) — è assegnazione. == (due segni) — confronto. Questo è uno degli errori più comuni tra i principianti! Se per sbaglio scrivi:
if (x = 5) // ERRORE!
— il compilatore ti sgriderà, e fa benissimo.
7. Lavorare con le stringhe nelle condizioni
Puoi confrontare non solo numeri, ma anche stringhe:
string password = Console.ReadLine();
if (password == "qwerty")
{
Console.WriteLine("Sei entrato!");
}
Attenzione: il confronto tra stringhe con == in C# funziona bene nei casi normali, perché confronta il contenuto delle stringhe (non solo i riferimenti agli oggetti). Parleremo meglio delle particolarità del confronto tra stringhe quando arriveremo ai metodi sulle stringhe e alle questioni di localizzazione.
8. Particolarità e sfumature:
Parentesi graffe: servono o no?
Se dopo if o else c'è solo un comando, puoi non mettere le parentesi graffe:
if (age > 18)
Console.WriteLine("Hai più di 18!");
// Ma è più sicuro SCRIVERLE SEMPRE:
if (age > 18)
{
Console.WriteLine("Hai più di 18!");
}
Consiglio: scrivile sempre. Ti protegge da un sacco di errori, soprattutto quando il codice cresce.
Errori logici: attenzione alle condizioni!
Se scrivi così:
if (age > 18)
Console.WriteLine("Hai più di 18!");
Console.WriteLine("Benvenuto!");
Il compilatore leggerà il codice così:
if (age > 18)
{
Console.WriteLine("Hai più di 18!");
}
Console.WriteLine("Benvenuto!");
La seconda riga verrà sempre eseguita — le parentesi servono per mettere entrambe le righe dentro lo stesso "ramo".
GO TO FULL VERSION