CodeGym /Kurslar /C# SELF /Daxili if, çoxsəviyyəli məntiq

Daxili if, çoxsəviyyəli məntiq

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

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
    }
}
Bir if başqa bir if-in içində

Ə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.

2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Attraksiona yaş yoxlanışı
Attraksiona yaş yoxlanışı
2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Biletin qiymətinin hesablanması
Biletin qiymətinin hesablanması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION