CodeGym /Kursy /C# SELF /Priorytet operatorów i nawiasy w warunkach

Priorytet operatorów i nawiasy w warunkach

C# SELF
Poziom 3 , Lekcja 4
Dostępny

1. Wprowadzenie

Zacznijmy od życiowej analogii. Wyobraź sobie przepis:

Wymieszaj mąkę, jajka i cukier ubij dodaj masło ubij jeszcze raz.

Wygląda dziwnie? A teraz wyobraź sobie, że między słowami "ubij" i "dodaj" stoi przecinek albo nawias. Kolejność działań od razu robi się jaśniejsza.

W programowaniu jest podobnie, gdy piszesz złożone wyrażenie:

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

Jaka kolejność? Co liczy się pierwsze: a > 0 && b < 10, potem || c == 3? Czy może odwrotnie? Bez jasnej kolejności komputer może "pomieszać składniki" i wynik będzie zaskakujący.

2. Priorytet operatorów w C#

C# (jak większość języków programowania) używa określonej tabeli priorytetów operatorów.
Operatory o wyższym priorytecie wykonują się wcześniej niż te o niższym.

Spójrz na najważniejszą część tej tabeli (dla wyrażeń warunkowych):

Operator Opis Priorytet
() Nawiasy najwyższy
! Logiczne "NIE" wysoki
==, != Równe / nierówne średni
<, >, <=, >= Porównania średni
&& Logiczne "I" niższy
|| Logiczne "LUB" jeszcze niższy

(Są jeszcze operatory arytmetyczne — one mają wyższy priorytet niż logiczne.)

Najważniejsza zasada

Operator "I" (&&) ma wyższy priorytet niż "LUB" (||),
czyli najpierw liczy się "I", potem "LUB".

Schemat blokowy obliczania priorytetu warunków

Najpierw liczy się a > 0 && b < 10, potem wynik porównuje się z c == 3 przez ||

W praktyce: a > 0 && b < 10 || c == 3 — najpierw liczy się a > 0 && b < 10, potem wynik porównuje się z c == 3 przez ||.

3. Kierunek operatorów: od lewej do prawej i odwrotnie

Oprócz priorytetu jest jeszcze takie słowo: asocjatywność.
To zasada, w jakim kierunku liczą się operatory, jeśli stoją "obok siebie" i mają ten sam priorytet.

Przykład:

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

Pytanie: jak to się policzy?
Odpowiedź: asocjatywność dla &&od lewej do prawej.
Czyli najpierw a && b, potem wynik z c.

W odniesieniu do warunków:

Operator Asocjatywność
&&, || od lewej do prawej
! od prawej do lewej

4. Nawiasy — twój najlepszy ziomek w złożonych warunkach

I tu zaczyna się magia (i ratunek). Gdy piszesz wyrażenie, nawiasy zmieniają priorytet i robią twój kod czytelniejszym i bezpieczniejszym.

Przykład 1 (bez nawiasów):

// Chcemy: "Jeśli użytkownik jest dorosły i obywatelem, albo jeśli ma specjalną przepustkę"
bool isAdult = age >= 18;
bool isCitizen = country == "Białoruś";
bool hasPermit = hasSpecialPass == true;

if (isAdult && isCitizen || hasPermit)
{
    Console.WriteLine("Dostęp dozwolony!");
}

Jak liczy C#:
Najpierw liczy isAdult && isCitizen, potem wynik porównuje przez || z hasPermit.

  • Załóżmy, isAdult = true, isCitizen = false, hasPermit = true
  • isAdult && isCitizentrue && falsefalse
  • false || truetrue

Czyli jeśli ktoś ma specjalną przepustkę, i tak go wpuszczą.
A jeśli bez przepustki, ale dorosły obywatel — też go wpuszczą.

Przykład 2 (z nawiasami):

if (isAdult && (isCitizen || hasPermit))
{
    Console.WriteLine("Dostęp dozwolony!");
}

Teraz program najpierw sprawdza:
isCitizen || hasPermit, a potem ten wynik razem z isAdult.

Czyli musisz być dorosły i (albo obywatelem, albo mieć specjalną przepustkę).
Mała różnica w nawiasach — ogromna różnica w logice!

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION