CodeGym /Kurslar /Java SELF AZ /Müxtəlif operatorların işləmə incəlikləri

Müxtəlif operatorların işləmə incəlikləri

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Boolean əməliyyatları

|& operatorlarını yalnız rəqəmlərə deyil, həm də boolean tipli ifadələrə tətbiq etmək olar.

Lakin, artıq bildiyiniz kimi, məntiqi ifadələr üçün &&|| operatorları mövcuddur. Bəs | yerinə ||& yerinə && istifadə etməyin bizə nə kimi faydası ola bilər? Ümumiyyətlə, bunun bir mənası varmı? Məlum olur ki, bəzən var.

Məntiqi operatorlar ||&& verilmiş ifadələri tənbəl prinsip adlanan yanaşma ilə soldan sağa doğru həll edir.

(ifadə1) || (ifadə2) || (ifadə3)

Əgər ifadə1 true olarsa, ifadə2 və ifadə3-ü hesablamanın bir mənası yoxdur: nəticə yenə də true olacaq.

Buna görə də ifadələr hesablanarkən (özü də sırayla soldan sağa doğru), biz true aldığımız anda, qalan ifadələrin hesablanması atlanır. Əgər ifadələrdə ifadə2ifadə3, hər hansısa funksiya çağırışları varsa, bu funksiyalar çağırılmır!

Eyni şey məntiqi && operatoru üçün də keçərlidir:

(ifadə1) && (ifadə2) && (ifadə3)

Əgər ifadə1 false olarsa, ifadə2ifadə3-ü hesablamanın mənası yoxdur: nəticə yenə də false olacaq.

Bu vacib məqam, aşağıdakı növ yazıları gündəmə gətirir:

String s = null;
if (s != null && s.length() > 0) {

Yuxarıdakı nümunədə biz heç vaxt NullPointerException ilə qarşılaşmayacağıq, çünki s.length() ifadəsi yalnız birinci hissə s != null true olduqda yerinə yetiriləcək.

Əgər s null olarsa, && operatorunun sol tərəfində false dəyəri olacaq və bütün məntiqi ifadənin nəticəsi false olacaq. Buna görə də ikinci hissənin (s.length() > 0) hesablanması baş verməyəcək.

Əgər məntiqi ifadədə | və ya & operatoru istifadə olunarsa, tənbəl hesablama baş verməyəcək — hər bir halda bütün ifadələr hesablanacaq.



2. Java-da əməliyyatların prioriteti

Məktəb riyaziyyat dərslərindən xatırladığınız kimi, vurma əməliyyatı toplama əməliyyatından daha yüksək prioritetə malikdir. Amma mötərizələr daha yüksək prioritetə malikdir: əvvəlcə mötərizədəki ifadələr hesablanır, sonra vurma/bölmə və toplama/çıxma.

Java-da operatorların da öz prioriteti var. Sadəcə: a) operatorlar daha çoxdur, b) bəzi operatorların əməliyyatları soldan sağa, digərləri isə sağdan sola icra olunur.

Java operatorlarının tam cədvəli belə görünür:

Kateqoriya Operator Assosiativlik
Postfix () [] . Soldan sağa
Unary ++ -- ! ~ Sağdan sola
Müxtəliflik * / % Soldan sağa
Toplama-çıxma + - Soldan sağa
Shift >> >>> << Soldan sağa
Müqayisə > >= < <= Soldan sağa
Bərabərlik == != Soldan sağa
Bitwise (AND) & Soldan sağa
Exclusive YAXUD (XOR) ^ Soldan sağa
Bitwise YAXUD (OR) | Soldan sağa
Lojiq (AND) && Soldan sağa
Lojiq YAXUD (OR) || Soldan sağa
Şərtli ?: Sağdan sola
Təyin = += -= *= /= %= >>= <<= &= ^= |= Sağdan sola
Vergül , Soldan sağa

Cədvəlin yuxarı sətrində ən prioritet operatorlar yerləşir. Dairəvi mötərizələr () prioriteti göstərmək üçün istifadə olunur. Kvadrat mötərizələr [] array dəyişəninin indeksləşdirilməsi üçün istifadə olunur. . operatoru obyekt və ya sinif referansından sahələr və metodlar əldə etmək üçün istifadə olunur.

Cədvəldə aşağıda olan operatorların prioriteti daha aşağıdır.

Əgər ifadənizdə bir neçə operator istifadə edirsinizsə, tənbəllik etməyin: mötərizələrdən istifadə edin.

Bəli, Java-da if (a & 1<<b > ~c) kimi bir şey yazmaq olar, amma belə etməyin. Kodu təkcə kompilyator üçün deyil, həm də digər proqramçılar üçün yazırsınız. Kod nə qədər oxunaqlı olsa, bir o qədər yaxşıdır.



3. Prefiks və postfiks inkrement

Artıq bildiyiniz kimi, Java-da dəyəri 1 artıran inkrement operatoru (++) və 1 azaldan dekrement operatoru (--) mövcuddur.

Bilmədiyiniz bir şey isə odur ki, bu əməliyyatların iki növü var: prefiks – operator dəyişəndən əvvəl yazılır, və postfiks — operator dəyişəndən sonra yazılır. Bu operatorlar bir az fərqli işləyir.

Java-da bu kimi ifadə yaza bilərsiniz:

int a = 5;
int b = a++;

Əgər ++ operatoru dəyişəndən sonra gəlirsə və dəyişən hər hansı ifadədə iştirak edirsə (yuxarıdakı nümunədə olduğu kimi), ifadədə dəyişənin cari dəyəri istifadə olunacaq, yalnız sonra bu dəyər 1 artırılacaq.

Başqa sözlə, bu təxminən belə olacaq:

int a = 5;
int b = a;
a = a + 1;

Yəni, b-nin dəyəri 5 olacaq, 6 deyil, əvvəlcə düşündüyünüz kimi.

Əgər ++ operatoru dəyişəndən əvvəl yazılıbsa və dəyişən hər hansı ifadədə iştirak edirsə, əvvəlcə dəyər 1 artırılacaq, yalnız sonra ifadədə iştirak edəcək.

int a = 5;
int b = ++a;

Yuxarıdakı nümunə aşağıdakı nümunəyə ekvivalentdir:

int a = 5;
a = a + 1;
int b = a;

Burada artıq b-nin dəyəri 6 olacaq.

Hətta bir nümunə var ki, Java proqramçıları onu istifadə edir, onların qarşısındakı şəxsin də Java proqramçısı olduğunu müəyyən etmək üçün:

int a = 5;
int b = ++a++a;

Bəli, bu şəkildə də yazmaq olar.

Bu nümunə mükəmməl şəkildə kompilyasiya olunacaq və təxminən belə olacaq:

int a = 5;

a = a + 1;
int v1 = a;

a = a + 1;
int v2 = a;

int b = v1 + v2;

-- operatoru üçün də hər şey dəqiq eynidir.



Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION