1. Daxili if-in əsas sintaksisi
Real həyatda nadir hallarda qərar yalnız bir meyara görə verilir. Adətən bir neçə şərti yoxlamaq lazım olur və onlar bir-birindən asılı olur. Məsələn, konsertə girmək üçün sadəcə böyüklərdən olmaq kifayət deyil — bəzən dəvətlilər siyahısında olmaq lazımdır. Bax, burada çoxsəviyyəli məntiq meydana çıxır və bizə daxili if operatorları kömək edir.
Daxili şərtlər — yəni bir if başqa bir if-in içində yaşayır. Təsəvvür elə ki, qutu içində qutu var: birinci qutu açıldısa (şərt ödəndi), içindəkini yoxlayırıq və bəlkə də ikinci qutunu açırıq. Kod və məntiq baxımından bu, çox güclü bir alətdir.
Gəlin sadədən başlayaq:
if (şərtA)
{
// əgər şərtA — true (doğrudur) olarsa əməliyyatlar
if (şərtB)
{
// hər iki şərt doğrudursa əməliyyatlar
}
}
Əgər bu sənə matryoşkanı xatırladırsa — deməli, hər şeyi düz başa düşürsən! Daxili if yalnız xarici if işləyibsə icra olunur.
Nümunə: kluba giriş
Gəlin tədris tətbiqimizi inkişaf etdirək, burada istifadəçi əvvəllər ad və yaş daxil edirdi. İndi ikinci səviyyə yoxlama əlavə edirik: tutaq ki, qapalı kluba girmək üçün 21 yaşdan böyük olmaq və dəvət koduna sahib olmaq lazımdır.
Console.Write("Adınızı daxil edin: ");
string name = Console.ReadLine();
Console.Write("Yaşınızı daxil edin: ");
int age = int.Parse(Console.ReadLine());
if (age >= 21)
{
Console.Write("Dəvət kodunu daxil edin: ");
string code = Console.ReadLine();
if (code == "VIP2024")
{
Console.WriteLine("Xoş gəlmisən, " + name + ", VIP-kluba!");
}
else
{
Console.WriteLine("Bağışlayın, kod səhvdir. Giriş qadağandır.");
}
}
else
{
Console.WriteLine("Bağışlayın, giriş yalnız 21 yaşdan!");
}
Diqqət et: daxili if kodu yalnız yaş yoxlamadan keçibsə yoxlayır. Bu resurslara qənaət edir (və mühafizəçini əsəbiləşdirmir).
2. Neçə səviyyə iç-içə yazmaq olar?
Texniki olaraq, istədiyin qədər. Amma əslində — nə qədər çox səviyyə olsa, kodu oxumaq və saxlamaq bir o qədər çətin olur. Praktikada nadir hallarda 2-3 səviyyədən çox iç-içə yazılır. Əgər 4 və daha çox səviyyəli “pilləkənlər” yaranırsa, düşünmək lazımdır: bəlkə məntiqi sadələşdirmək və ya yoxlamanı ayrıca funksiyaya çıxarmaq olar (bu isə başqa dərsin mövzusudur!).
3. Daxili if və else: tələlər və nüanslar
Yeni başlayanların səhvi: süslü mötərizələri səliqəsiz yazmaq.
Daxili şərtlər yazanda, xüsusilə else istifadə edəndə, C# sintaksis qaydalarına ciddi əməl edir. Əgər süslü mötərizələr {} əlavə etməsən, if və ya else-dən sonra yalnız birinci sətr ona aid olur. Bu, tez-tez əsəbi bug-ların səbəbidir.
Potensial səhv olan nümunə:
if (age >= 21)
if (code == "VIP2024")
Console.WriteLine("Xoş gəlmisən!");
else
Console.WriteLine("Kod səhvdir.");
Çoxları gözləyir ki, else yaş yoxlamasına aiddir, amma əslində o, ən yaxın if-ə (dəvət kodunun yoxlanmasına) aiddir. Buna görə mesajlar gözlənildiyi kimi göstərilməyə bilər. Həmişə mötərizə istifadə et — hətta içində bir sətr olsa belə!
Qarışıqlıq olmasın deyə, bir də göstərirəm. Kompilyator yuxarıdakı kodu belə başa düşür:
if (age >= 21)
{
if (code == "VIP2024")
Console.WriteLine("Xoş gəlmisən!");
else
Console.WriteLine("Kod səhvdir.");
}
Vacibdir! Bir daha:
Əgər if-else konstruksiyasında süslü mötərizələr qoyulmayıbsa, else əvvəlki (ən yaxın) if-ə aiddir.
4. Alternativlər: daxili şərtlərdə else if
Bəzən xarici if-in içində təkcə əlavə bir şərt yox, alternativ də nəzərdə tutmaq istəyirsən. Məsələn, dəvət kodu uyğun gəlmirsə, bilet almağı təklif etmək olar. Bu, daxili else if/else konstruksiyası ilə edilir:
if (age >= 21)
{
Console.Write("Dəvət kodunu daxil edin: ");
string code = Console.ReadLine();
if (code == "VIP2024")
{
Console.WriteLine("Kluba xoş gəlmisən!");
}
else if (code == "GUEST")
{
Console.WriteLine("Qonaq rejimi: giriş yalnız 23:00-a qədər.");
}
else
{
Console.WriteLine("Təəssüf, giriş mümkün deyil.");
}
}
else
{
Console.WriteLine("Giriş yalnız 21 yaşdan.");
}
Bu nümunədə üç ssenari arasında daxili seçim etdik: VIP kodu, qonaq kodu və imtina.
5. Praktika: çoxsəviyyəli məntiq ilə endirim kalkulyatoru
Gəlin belə bir tətbiq yazaq: istifadəçiyə mağazada yaşına və klub kartının olub-olmamasına görə endirim verilir.
- Əgər istifadəçinin yaşı 60-dan çox və ya bərabərdirsə — endirim 15%.
- Əgər yaş azdır, amma istifadəçidə klub kartı varsa — endirim 7%.
- Qalan hallarda endirim yoxdur.
Bunu necə yazmaq olar?
Console.Write("Yaşınızı daxil edin: ");
int age = int.Parse(Console.ReadLine());
double discount = 0.0;
if (age >= 60)
{
discount = 0.15;
}
else
{
Console.Write("Klub kartınız var? (bəli/xeyr): ");
string hasCard = Console.ReadLine();
if (hasCard == "bəli")
{
discount = 0.07;
}
}
Console.WriteLine("Sizin endiriminiz: " + (discount * 100) + "%");
Burada biz else budağında daxili if istifadə etdik. Əgər yaş uyğun gəlmirsə, yalnız onda kart barədə soruşuruq.
GO TO FULL VERSION