CodeGym /Corsi /C# SELF /Priorità degli operatori e parentesi nelle condizioni

Priorità degli operatori e parentesi nelle condizioni

C# SELF
Livello 3, Lezione 4
Disponibile

1. Introduzione

Partiamo da un'analogia quotidiana. Immagina una ricetta:

Mescola la farina, le uova e lo zucchero sbatti aggiungi il burro sbatti ancora.

Suona strano? Ora immagina che tra le parole "sbatti" e "aggiungi" ci sia una virgola o delle parentesi. L'ordine delle azioni diventa subito più chiaro.

Nel coding succede una cosa simile quando scrivi un'espressione complessa:

bool result = a > 0 && b < 10 || c == 3;

Qual è l'ordine? Cosa viene calcolato prima: a > 0 && b < 10, poi || c == 3? O il contrario? Senza un ordine di calcolo chiaro il computer può "confondere gli ingredienti" e il tuo risultato sarà inaspettato.

2. Priorità degli operatori in C#

C# (come la maggior parte dei linguaggi di programmazione) usa una tabella di priorità degli operatori.
Gli operatori con priorità più alta vengono eseguiti prima di quelli con priorità più bassa.

Dai un'occhiata alla parte più importante di questa tabella (per le espressioni condizionali):

Operatore Descrizione Priorità
() Parentesi la più alta
! Logico "NON" alta
==, != Uguale / diverso media
<, >, <=, >= Confronti media
&& Logico "E" più bassa
|| Logico "O" ancora più bassa

(Ci sono anche operatori aritmetici — hanno priorità più alta di quelli logici.)

La regola principale

Gli operatori "E" (&&) hanno priorità più alta di "O" (||),
cioè prima viene calcolato "E", poi "O".

Schema a blocchi del calcolo della priorità delle condizioni

Prima si calcola a > 0 && b < 10, poi il risultato viene confrontato con c == 3 tramite ||

In pratica: a > 0 && b < 10 || c == 3 — prima si calcola a > 0 && b < 10, poi il risultato viene confrontato con c == 3 tramite ||.

3. Direzione degli operatori: da sinistra a destra e viceversa

Oltre alla priorità, c'è anche questa parola: associatività.
Questa regola dice in che direzione vengono calcolati gli operatori se sono "vicini" e hanno la stessa priorità.

Esempio:

bool a = true, b = false, c = true;
bool result = a && b && c;

Domanda: come viene calcolato?
Risposta: l'associatività di && è da sinistra a destra.
Quindi prima a && b, poi il risultato con c.

Applicato alle condizioni:

Operatore Associatività
&&, || da sinistra a destra
! da destra a sinistra

4. Le parentesi — il tuo migliore amico nelle condizioni complesse

Qui inizia la magia (e la salvezza). Quando scrivi un'espressione, le parentesi cambiano la priorità e rendono il tuo codice più chiaro e sicuro.

Esempio 1 (senza parentesi):

// Vogliamo: "Se l'utente è adulto e cittadino, oppure se ha un permesso speciale"
bool isAdult = age >= 18;
bool isCitizen = country == "Bielorussia";
bool hasPermit = hasSpecialPass == true;

if (isAdult && isCitizen || hasPermit)
{
    Console.WriteLine("Accesso consentito!");
}

Come calcola C#:
Prima calcola isAdult && isCitizen, poi confronta il risultato con || e hasPermit.

  • Supponiamo, isAdult = true, isCitizen = false, hasPermit = true
  • isAdult && isCitizen → true && false → false
  • false || true → true

Cioè, se una persona ha un permesso speciale, viene comunque fatta passare.
E se non ha il permesso, ma è un adulto cittadino — viene fatta passare lo stesso.

Esempio 2 (con parentesi):

if (isAdult && (isCitizen || hasPermit))
{
    Console.WriteLine("Accesso consentito!");
}

Ora il programma controlla prima:
isCitizen || hasPermit, e poi questo risultato insieme a isAdult.

Cioè devi essere adulto e (o cittadino, o avere un permesso speciale).
Una piccola differenza nelle parentesi — una grande differenza nella logica!

2
Compito
C# SELF, livello 3, lezione 4
Bloccato
Condizione semplice
Condizione semplice
2
Compito
C# SELF, livello 3, lezione 4
Bloccato
Verifica di un'espressione logica complessa
Verifica di un'espressione logica complessa
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION