CodeGym /Kurslar /C# SELF /Operatorların prioriteti və şərtlərdə mötərizələr

Operatorların prioriteti və şərtlərdə mötərizələr

C# SELF
Səviyyə, Dərs
Mövcuddur

1. Giriş

Gəlin gündəlik bir analojiya ilə başlayaq. Təsəvvür elə bir resept var:

Unu, yumurtanı və şəkəri qarışdırın çalın yağı əlavə edin yenə çalın.

Qəribə görünür? İndi təsəvvür elə ki, "çalın" və "əlavə edin" sözlərinin arasında vergül və ya mötərizə var. Hərəkətlərin ardıcıllığı dərhal daha aydın olur.

Proqramlaşdırmada da oxşar vəziyyət yaranır, sən mürəkkəb ifadə yazanda:

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

Hansının ardıcıllığı? Birinci nə hesablanır: a > 0 && b < 10, sonra || c == 3? Yoxsa tam tərsi? Hesablamaların dəqiq ardıcıllığı olmadan kompüter "inqrediyentləri qarışdıra" bilər və nəticə gözlənilməz olar.

2. C#-da operatorların prioriteti

C# (əksər proqramlaşdırma dilləri kimi) operatorların prioritet cədvəlindən istifadə edir.
Yüksək prioritetli operatorlar aşağı prioritetlilərdən əvvəl icra olunur.

Bu cədvəlin ən vacib hissəsinə bax (şərt ifadələri üçün):

Operator Təsviri Prioritet
() Mötərizələr ən yüksək
! Loji "YOX" yüksək
==, != Bərabərdir / bərabər deyil orta
<, >, <=, >= Müqayisələr orta
&& Loji "VƏ" aşağı
|| Loji "YAXUD" daha da aşağı

(Hələ arifmetik operatorlar da var — onlar loji operatorlardan daha yüksək prioritetə malikdir.)

Əsas qayda

"VƏ" (&&) operatorunun prioriteti "YAXUD" (||)-dan yüksəkdir,
yəni əvvəlcə "VƏ", sonra "YAXUD" hesablanacaq.

Şərt prioritetinin hesablanma blok-sxemi

Əvvəl a > 0 && b < 10 hesablanır, sonra nəticə c == 3 ilə || vasitəsilə müqayisə olunur

Praktikada: a > 0 && b < 10 || c == 3 — əvvəl a > 0 && b < 10 hesablanır, sonra nəticə c == 3 ilə || vasitəsilə müqayisə olunur.

3. Operatorların istiqaməti: soldan sağa və əksinə

Prioritetdən əlavə, bir də belə bir söz var: assosiativlik.
Bu qayda göstərir ki, eyni prioritetli operatorlar "yanaşı" olanda hansı istiqamətdə hesablanır.

Nümunə:

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

Sual: necə hesablanacaq?
Cavab: && üçün assosiativlik — soldan sağa.
Deməli, əvvəl a && b, sonra nəticə c ilə.

Şərtlərə tətbiq edəndə:

Operator Assosiativlik
&&, || soldan sağa
! sağdan sola

4. Mötərizələr — mürəkkəb şərtlərdə ən yaxşı dostun

Burada artıq magiya (və xilas) başlayır. Sən ifadə yazanda mötərizələr prioriteti dəyişir və kodunu daha aydın və təhlükəsiz edir.

Nümunə 1 (mötərizəsiz):

// Biz istəyirik: "Əgər istifadəçi böyüklərdirsə və vətəndaşdırsa, ya da onun xüsusi icazəsi varsa"
bool isAdult = age >= 18;
bool isCitizen = country == "Belarus";
bool hasPermit = hasSpecialPass == true;

if (isAdult && isCitizen || hasPermit)
{
    Console.WriteLine("Giriş icazəlidir!");
}

C# necə hesablayır:
Əvvəlcə isAdult && isCitizen hesablanır, sonra nəticə || ilə hasPermit ilə müqayisə olunur.

  • Tutaq ki, isAdult = true, isCitizen = false, hasPermit = true
  • isAdult && isCitizen → true && false → false
  • false || true → true

Yəni, əgər adamda xüsusi icazə varsa, yenə də buraxılacaq.
Əgər xüsusi icazə yoxdursa, amma böyüklər və vətəndaşdırsa — yenə də buraxılacaq.

Nümunə 2 (mötərizələrlə):

if (isAdult && (isCitizen || hasPermit))
{
    Console.WriteLine("Giriş icazəlidir!");
}

İndi proqram əvvəlcə yoxlayır:
isCitizen || hasPermit, sonra bu nəticəni isAdult ilə birlikdə.

Yəni sən böyüklər olmalısan və (ya vətəndaş, ya da xüsusi icazə sahibi).
Mötərizədə kiçik fərq — məntiqdə böyük fərq!

2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Sadə şərt
Sadə şərt
2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Mürəkkəb məntiqi ifadənin yoxlanılması
Mürəkkəb məntiqi ifadənin yoxlanılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION