Menu
Coddy logo textTech

Flatten Nested Conditionals

Coddy'nin C# Journey'sinin Mantık & Akış bölümünün bir parçası — ders 22 / 66.

İç içe koşullar kodunuzu okuması ve bakımı zor hale getirebilir. Düzleştirme, girinti seviyelerini azaltarak okunabilirliği iyileştirmeye yardımcı olur.

İşte derin iç içe geçmiş koşullu ifadelerin bir örneği:

if (userLoggedIn)
{
    if (userHasPermission)
    {
        if (fileExists)
        {
            // Process the file
            ProcessFile();
        }
        else
        {
            Console.WriteLine("File not found");
        }
    }
    else
    {
        Console.WriteLine("No permission");
    }
}
else
{
    Console.WriteLine("Not logged in");
}

Bunu erken dönüşler veya koruma koşulları kullanarak düzleştirebiliriz:

if (!userLoggedIn)
{
    Console.WriteLine("Not logged in");
    return;
}

if (!userHasPermission)
{
    Console.WriteLine("No permission");
    return;
}

if (!fileExists)
{
    Console.WriteLine("File not found");
    return;
}

// Process the file
ProcessFile();

Düzleştirilmiş kodun daha az girintiye sahip olduğunu ve takip etmenin daha kolay olduğunu fark edin.

challenge icon

Görev

Kolay

Burs uygunluk kontrolünde, derin iç içe geçmiş koşullar kodu okumayı ve sürdürmeyi zorlaştırır. Bu meydan okumada, dağınık iç içe geçmiş koşullu yapıyı koruma koşulları kullanarak temiz, okunabilir koda dönüştüreceksiniz.

Bir koruma koşulu, belirli bir koşulu hemen işleyen erken bir return ifadesidir ve fonksiyonun geri kalanının "happy path"e odaklanmasını sağlar.

Görevimiz, CheckScholarshipEligibility metodundaki kısmen uygulanan koruma koşullarını bu kurallara göre tamamlamaktır:

  1. Yaş 17'den küçükse, hemen "Not eligible due to age requirement" döndürün
  2. Eğer GPA ≥ 3.5 VE öğrenci tavsiyeye sahipse, tam burs verin
  3. Eğer GPA ≥ 3.8 ise, tam burs verin (tavsiye olmasa bile)
  4. Eğer GPA ≥ 3.0 VE öğrenci tavsiyeye sahipse, kısmi burs verin
  5. Eğer GPA 3.5 ile 3.8 arasındaysa, kısmi burs verin
  6. Tüm diğer durumlar için, "Not eligible for scholarship" döndürün

Kopya kağıdı

İç içe koşullar kodu okumayı ve bakımını zorlaştırabilir. Düzleştirme, girinti seviyelerini azaltarak okunabilirliği artırır.

Derin iç içe koşullar yerine:

if (userLoggedIn)
{
    if (userHasPermission)
    {
        if (fileExists)
        {
            // Process the file
            ProcessFile();
        }
        else
        {
            Console.WriteLine("File not found");
        }
    }
    else
    {
        Console.WriteLine("No permission");
    }
}
else
{
    Console.WriteLine("Not logged in");
}

Yapıyı düzleştirmek için erken dönüşler veya guard maddeleri kullanın:

if (!userLoggedIn)
{
    Console.WriteLine("Not logged in");
    return;
}

if (!userHasPermission)
{
    Console.WriteLine("No permission");
    return;
}

if (!fileExists)
{
    Console.WriteLine("File not found");
    return;
}

// Process the file
ProcessFile();

Bir guard maddesi, belirli bir koşulu hemen işleyen bir erken dönüş ifadesidir ve fonksiyonun geri kalanının "mutlu yol"a odaklanmasını sağlar.

Kendin dene

using System;

class Program
{
    public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
    {
        // Yaş gereksinimi için koruyucu koşul
        if (age < 17)
        {
            Console.WriteLine("Not eligible due to age requirement.");
            return;
        }
        
        // Tavsiye ile tam burs için koruyucu koşul
        if (/* Bu koşulu tamamlayın */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Olağanüstü GPA ile tam burs için koruyucu koşul
        if (/* Bu koşulu tamamlayın */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Tavsiye ile kısmi burs için koruyucu koşul
        if (/* Bu koşulu tamamlayın */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // İyi GPA ile kısmi burs için koruyucu koşul
        if (/* Bu koşulu tamamlayın */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Varsayılan durum: burs için uygun değil
        Console.WriteLine("Not eligible for scholarship.");
    }
    
    static void Main(string[] args)
    {
        // Anında geri bildirim için test vakaları
        Console.WriteLine("Test Case 1: Age 16, GPA 4.0, Has Recommendation: True");
        CheckScholarshipEligibility(16, 4.0, true);
        
        Console.WriteLine("\nTest Case 2: Age 18, GPA 3.9, Has Recommendation: False");
        CheckScholarshipEligibility(18, 3.9, false);
        
        Console.WriteLine("\nTest Case 3: Age 17, GPA 3.6, Has Recommendation: True");
        CheckScholarshipEligibility(17, 3.6, true);
        
        Console.WriteLine("\nTest Case 4: Age 19, GPA 3.2, Has Recommendation: True");
        CheckScholarshipEligibility(19, 3.2, true);
        
        Console.WriteLine("\nTest Case 5: Age 18, GPA 2.8, Has Recommendation: False");
        CheckScholarshipEligibility(18, 2.8, false);
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler