CodeGym /Kurslar /C# SELF /C#-da ternary operatoru: qısa şərtlər və incəliklər

C#-da ternary operatoru: qısa şərtlər və incəliklər

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

1. Expression-lar vs Statement-lar

C#-da bütün komandalar iki kateqoriyaya bölünür: komandalar (Statement) və ifadələr (Expression). Komanda üçün adətən deyirlər ki, o icra olunur, ifadə üçün isə — hesablanır. Amma əsas məsələ bu deyil.

Əsas fərq: ifadənin hesablanma nəticəsi var. Bu nəticənin tipi olur və onu dəyişənə mənimsətmək və ya başqa ifadədə istifadə etmək olar.

Nümunələr:

Kod Qeyd
int x;
Komanda
(a < 10)
İfadə, tipi bool
i++;
İfadə, tipi i dəyişəninin tipi ilə eynidir
x = 5;
İfadə, tipi x dəyişəninin tipi ilə eynidir

Bu bizə nə verir?

Çoxlu komandalar əslində ifadədir (hesablanma nəticəsi var). Məsələn, belə kod işləyir:
int x, y, z;
x = y = z = 1; 	// x = (y = (z = 1));
İfadənin nəticəsini lazım deyilsə, sadəcə görməməzlikdən gəlmək olar:
Console.ReadLine();	// daxil olunan nəticəni görməməzlikdən gəlirik

Bu rahatdır, əgər ifadə nəticədən əlavə nəsə faydalı iş görürsə (məsələn, ekrana çıxarır və ya input oxuyur).

2. Ternary operator

C#-da xüsusi bir ternary (üçlü) operator var. O, if–else operatorunun qısa yazılışına bənzəyir:


Şərt ? İfadə1 : İfadə2;
Ternary operatorun sintaksisi

Əgər Şərt doğrudursa, İfadə1 hesablanır, əks halda — İfadə2. Şərtdən sonra ? qoyulur, iki ifadə isə : ilə ayrılır.

if-else-dən əsas fərqi: ternary operator — ifadədir, onun nəticəsini dəyişənə mənimsətmək və ya başqa ifadədə istifadə etmək olar.

Məsələn, iki ədədin minimumunu hesablayaq:

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

Və ya şərtdən asılı olaraq dəyişənə fərqli dəyərlər mənimsədək:


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

Eyni şeyi ternary operatorla:


int age = 25;
int money = age > 30 ? 100 : 50;
Ternary operator — qısa yazılış

Nəyi seçmək yaxşıdır: if-else yoxsa ternary operator? Sürət fərqi yoxdur, amma ternary operator qısa şərtlər üçün əladır. Əgər kod bir sətrə sığmırsa — oxunaqlılıq üçün if-else istifadə etmək daha yaxşıdır.

3. İşləmə incəlikləri

Dəyərlərin tipləri
Ternary operatorun hər iki qolu (<doğru_olanda_dəyər><səhv_olanda_dəyər>) eyni tipdə olmalıdır və ya 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 qol — int

Kompilyasiya xətası:

int a = 10, b = 20;
// string və int uyğun deyil
string result = (a > b) ? "boyukdur" : 0; // Kompilyasiya xətası

Düzgün variant:

int a = 10, b = 20;
string result = (a > b) ? "boyukdur" : "kicikdir və ya beraberdir";

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

int number = -5;
int abs = (number >= 0) ? number : -number;
Console.WriteLine(abs); // 5

4. Ternary operatoru tətbiqə yerləşdirmək

Gəlin bir dialoq proqramı yazaq: salamdan əlavə, proqram istifadəçiyə gələn il neçə yaşı olacağını deyəcək və onun yetkin olub-olmayacağını göstərəcək.

Console.Write("Adınızı daxil edin: ");
string name = Console.ReadLine();

Console.Write("Yaşınızı daxil edin: ");
string ageText = Console.ReadLine();
int age = int.Parse(ageText);

int nextYear = age + 1;
string status = (nextYear >= 18) ? "yetkin" : "yetkin deyil";

Console.WriteLine($"Salam, {name}! Gələn il {nextYear} yaşınız olacaq. Siz {status} olacaqsınız.");

Detalları izah edək:

  • status dəyişəni ternary operatorla hesablanır: əgər gələn il yaş 18 və ya çoxdursa, istifadəçi yetkin olacaq (və ya elə qalacaq).
  • Ternary operatoru asanlıqla birbaşa sətrlərə (məsələn, interpolasiya ilə $"") əlavə etmək olar.

5. İç-içə ternary operatorlar — ehtiyatlı ol!

Ternary operatoru bir-birinin içində istifadə etmək olar (hər qolun içində başqa bir ternary ola bilər). Amma… bu adətən baş ağrısı yaradır, xüsusən də kodu səndən sonra oxuyan üçün (hətta 2 gün sonra özün üçün də).

Nümunə: yaşa görə kateqoriya təyin etmək

string category = (age < 7) ? "məktəbəqədər" :
                  (age < 18) ? "məktəbli" :
                  (age < 65) ? "böyuk" : "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öyuk
65 və daha çox əks halda pensioner

Belə kodu oxumaq hələ mümkündür, amma məntiq daha çətin olsa — if-else if-else istifadə etmək daha yaxşıdır.

6. Lifehack: ternary operator və bool tipi

Bəzən belə kod görmək olur:

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

Amma bu artıqdır. (age >= 18) ifadəsi özü bool qaytarır. Ona görə də sadəcə belə yazmaq olar:

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