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

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

JAVA 25 SELF
Səviyyə, Dərs
Mövcuddur

1. Giriş

Gəlin məişət analoqu ilə başlayaq. Təsəvvür edin ki, resept var:

Unu, yumurtaları və şəkəri qarışdırın, çırpın, yağı əlavə edin, bir də çırpın.

Qəribə görünür? İndi isə təsəvvür edin ki, “çırpın” və “əlavə edin” sözlərinin arasında vergül və ya mötərizə var. Addımların ardıcıllığı dərhal daha aydın olur.

Proqramlaşdırmada oxşar vəziyyət mürəkkəb ifadə yazanda yarana bilər:

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

Sıra necədir? Əvvəl nə hesablanır: a > 0 && b < 10, sonra || c == 3? Yoxsa tam əksi?
Hesablamaların dəqiq qaydası olmadan kompüter “inqrediyentləri qarışdıra” bilər və nəticəniz gözlənilməz olar.

2. Java-da operatorların prioriteti

Java (çoxu proqramlaşdırma dilləri kimi) operatorların prioritetləri üçün müəyyən bir cədvəldə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ın (şərti ifadələr üçün):

Operator Təsvir Prioritet
()
Mötərizələr ən yüksək
!
Məntiqi “NOT” yüksək
==, !=
Bərabərdir / bərabər deyil orta
<, >, <=, >=
Müqayisələr orta
&&
Məntiqi “VƏ” aşağı
||
Məntiqi “VƏ YA” daha aşağı

(Hələ bir də riyazi operatorlar var — onların prioriteti məntiqi operatorlardan daha yüksəkdir.)

Əsas qayda

“VƏ” (&&) operatorlarının prioriteti “VƏ YA” (||) operatorlarından daha yüksəkdir,
yəni əvvəl “VƏ”, sonra “VƏ YA” hesablanır. Təsadüfi deyil ki, VƏ — məntiqi vurmadır, VƏ YA — toplama.

Şərt prioritetlərinin hesablanmasının blok‑sxemi

graph LR
    A["a > 0"] --&&--> B["b < 10"]
    B --||--> C["c == 3"]

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

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

Prioritetdən əlavə, daha bir anlayış var: assosiativlik.
Bu, eyni prioritetli operatorlar “yan-yana” dayandıqda hansı istiqamətdə hesablandıqlarını müəyyən edən qaydadır.

Nümunə:

boolean a = true, b = false, c = true;
boolean 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 edildikdə:

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

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

Sehr (və xilas) burada başlayır. İfadə yazanda mötərizələr prioriteti dəyişir və kodunuzu daha anlaşılan və təhlükəsiz edir.

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

// Biz belə istəyirik: "İstifadəçi yetkindirsə və vətəndaşdırsa, yaxud onun xüsusi keçidi varsa"
boolean isAdult = age >= 18;
boolean isCitizen = country.equals("Belarus");
boolean hasPermit = hasSpecialPass == true;

if (isAdult && isCitizen || hasPermit)
{
    System.out.println("Giriş icazəlidir!");
}

Java bunu belə hesablayır:
Əvvəlcə isAdult && isCitizen hesablanır, sonra nəticə hasPermit ilə || üzrə müqayisə olunur.

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

Yəni şəxsin xüsusi keçidi varsa, hər halda buraxılacaq.
Xüsusi keçidi olmasa da, yetkin və vətəndaşdırsa — yenə də buraxılacaq.

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

if (isAdult && (isCitizen || hasPermit))
{
    System.out.println("Giriş icazəlidir!");
}

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

Yəni siz yetkin olmalısınız və (ya vətəndaş, ya da xüsusi keçidi olan).
Mötərizələrdəki kiçik fərq — məntiqdə böyük fərq yaradır!

1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Məntiqi operatorların prioriteti 🌴
Məntiqi operatorların prioriteti 🌴
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Məntiqi ifadələrdə mötərizələrin istifadəsi 🎸
Məntiqi ifadələrdə mötərizələrin istifadəsi 🎸
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Gizli məclisə giriş 🤫
Gizli məclisə giriş 🤫
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Bankdan kredit alma şərtləri 💰
Bankdan kredit alma şərtləri 💰
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION