CodeGym /Kurslar /JAVA 25 SELF /Java-da ternar operator: yığcam şərtlər və nüanslar

Java-da ternar operator: yığcam şərtlər və nüanslar

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

1. İfadələr vs Operatorlar

Java-da bütün konstruksiyalar iki kateqoriyaya bölünür: operatorlar (Statement) və ifadələr (Expression). Operator haqqında adətən deyirlər ki, o icra olunur, ifadə haqqında isə — hesablanır. Amma bu, əsas deyil.

Operatorla ifadənin əsas fərqi ondadır ki, ifadənin hesablanma nəticəsi var. Bu nəticənin, birincisi, tipi var, ikincisi, bu nəticəni harasa mənimsətmək, yaxud başqa bir ifadədə istifadə etmək olar.

Nümunələr:

Kod Qeydlər
int x;
Operator
(a < 10)
İfadə, tipi boolean
i++;
İfadə, tipi i dəyişəninin tipi ilə eynidir
x = 5;
İfadə, tipi x dəyişəninin tipi ilə eynidir

Bəs bu bizə nə verir?

Birincisi, onu istifadə edə bilərik ki, çoxlu operatorlar əslində ifadədir (hesablanma nəticəsi var). Məsələn, belə kod işləyəcək:

int x, y, z; 
x = y = z = 1; 	// x = (y = (z = 1));

İkincisi, istəsək, ifadənin hesablanma nəticəsini görməməzliyə vura bilərik.

console.nextLine();	// daxil etmənin nəticəsini gözardı edirik

İfadənin nəticəsini görməməzliyə vurmaq, məsələn, ifadə nəticədən əlavə hansısa faydalı əməli də edirsə və bizə məhz o əməl lazımdırsa, nəticə isə yoxdursa, gərək ola bilər.

2. Ternar operator

Java-da ternar operator

Bu hiylə əvvəlkindən daha maraqlıdır. Java-da xüsusi ternar (üçlü) operator var. O, if–else operatorunun qısa yazılışına bənzəyir:


Uslovie ? Vyrazhenie1 : Vyrazhenie2;
Ternar operatorun sintaksisi

Əgər şərt doğrudursa, onda ifadə1 seçilir, əks halda ifadə2 seçilir. Şərtdən sonra sual işarəsi gəlir, iki ifadə isə iki nöqtə ilə ayrılır.

Ternar operatorun if-else operatorundan əsas fərqi ondadır ki, ternar operator ifadədir, deməli, onun nəticəsini nəyəsə mənimsətmək olar.

Məsələn, iki ədədin minimumunu hesablamaq istəyirik. Ternar operatorla bu kod belə görünəcək:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

Yaxud, deyək ki, hansısa şərtdən asılı olaraq dəyişənə müxtəlif dəyərlər mənimsətməlisiniz. Bunu necə etmək olar?

Variant 1 — if-else operatorundan istifadə etmək:

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

Variant 2 — ternar operatordan istifadə etmək, yəni if-else operatorunun qısa forması:

int age = 25;
int money = age > 30 ? 100 : 50;

Bəs hansından istifadə etmək daha yaxşıdır: if-else operatorundan, yoxsa ternar operatorundan? İcra sürəti baxımından xüsusi fərq yoxdur. Bu daha çox kodun oxunaqlılığı məsələsidir. Və bu, çox vacib məqamdır: kod təkcə düzgün işləməməli, həm də digər proqramçılar tərəfindən asan oxunmalıdır.

Ən sadə meyar belə ola bilər: kod bir sətrə sığırsa — ternar operatorundan istifadə edin, bir sətrə sığmırsa — if-else istifadə etmək daha yaxşıdır.

3. Nüanslar

Dəyər tipləri

Vacibdir: ternar operatorun hər iki budağındakı (<dəyər_doğru_olanda><dəyər_yanlış_olanda>) ifadələr eyni tipdə olmalı, ya da uyğun olmalıdır (məsələn, hər ikisi String və ya hər ikisi int).

İşləyir:

int a = 10, b = 20;
int max = (a > b) ? a : b; // hər iki budaq — int

Kompilyasiya xətası:

int a = 10, b = 20;
// String və int uyğun deyil
String result = (a > b) ? "böyüktur" : 0; // Kompilyasiya xətası: int dəyərini String tipli dəyişənə mənimsətmək olmaz

Düzgün variant:

int a = 10, b = 20;
String result = (a > b) ? "böyüktur" : "kiçik və ya bərabərdir";

Nümunə: ədədlərlə işləmə

Ternar operatorla modul dəyəri hesablayaq:

int number = -5;
int abs = (number >= 0) ? number : -number;
System.out.println(abs); // 5

4. Tətbiqdə ternar operatorun istifadəsi

Gəlin kiçik dialoq tətbiqi yazaq: salamlamadan əlavə, proqram istifadəçiyə bir ildən sonra neçə yaşı olacağını deyəcək və onun yetkin olub-olmayacağını göstərəcək.

System.out.print("Adınızı daxil edin: ");
String name = console.nextLine();

System.out.print("Yaşınızı daxil edin: ");
int age = console.nextInt();

int nextYear = age + 1;
String status = (nextYear >= 18) ? "yetkinlik yaşına çatmış" : "yetkinlik yaşına çatmamış";

System.out.println("Salam, " + name + "! Gələn il sizin " + nextYear + " yaşınız olacaq. Siz " + status + " olacaqsınız.");

Detalları izah edək:

status dəyişəni ternar operatorla hesablanır: əgər yaş gələn il 18-dən az deyilsə, deməli, istifadəçi yetkinlik yaşına çatmış olacaq (ya da elə qalacaq).

5. Daxili ternar operatorlar — ehtiyatlı olun!

Ternar operatoru bir-birinin içinə yerləşdirmək olar (hər budaqda başqa bir ternar ola bilər). Amma… bu adətən baş ağrısı yaradır, xüsusilə də kodu sizdən sonra oxuyacaq şəxs üçün (hətta bu, 2 gün sonra özünüz olsanız belə).

Nümunə: yaşa görə kateqoriyanın təyini

String category = (age < 7) ? "məktəbəqədər" :
                  (age < 18) ? "məktəbli" :
                  (age < 65) ? "böyük" : "pensioner";

Qərar cədvəli:

Yaş Şərt Nəticə
< 7
age < 7
məktəbəqədər
7–17
age < 18
məktəbli
18–64
age < 65
böyük
65 və daha çox əks halda pensioner

Belə kodu hələ oxumaq olar, amma məntiq daha mürəkkəbdirsə — if-else if-else istifadə etmək daha yaxşıdır.

6. Lifehack: ternar operator və boolean tipi

Bəzən belə bir ifadə yazmaq lazım olur:

boolean adult = (age >= 18) ? true : false;

Amma bu, artıqdır. (age >= 18) ifadəsinin özü artıq boolean qaytarır. Ona görə də onu belə qısaltmaq olar:

boolean adult = (age >= 18);
1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
Şərti operator
Şərti operator: if else
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION