Menu
Coddy logo textTech

Spłaszczanie zagnieżdżonych warunków

Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 22 z 66.

Zagnieżdżone instrukcje warunkowe mogą utrudniać czytanie i utrzymywanie kodu. Spłaszczenie ich pomaga poprawić czytelność dzięki zmniejszeniu liczby poziomów wcięć.

Oto przykład głęboko zagnieżdżonych instrukcji warunkowych:

if (userLoggedIn)
{
    if (userHasPermission)
    {
        if (fileExists)
        {
            // Przetwórz plik
            ProcessFile();
        }
        else
        {
            Console.WriteLine("File not found");
        }
    }
    else
    {
        Console.WriteLine("No permission");
    }
}
else
{
    Console.WriteLine("Not logged in");
}

Możemy uprościć ten kod, używając wczesnych instrukcji return lub klauzul ochronnych:

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

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

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

// Przetwórz plik
ProcessFile();

Zwróć uwagę, że spłaszczony kod ma mniej wcięć i łatwiej go śledzić.

challenge icon

Wyzwanie

Łatwy

Sprawdzanie kwalifikacji do stypendium za pomocą głęboko zagnieżdżonych instrukcji warunkowych sprawia, że kod jest trudny do odczytania i utrzymania. W tym wyzwaniu przekształcisz nieuporządkowaną, zagnieżdżoną strukturę warunkową w przejrzysty, czytelny kod za pomocą klauzul ochronnych.

Klauzula ochronna to instrukcja wczesnego zwrotu, która od razu obsługuje określony warunek, pozwalając pozostałej części funkcji skupić się na „ścieżce pomyślnego przebiegu”.

Twoim zadaniem jest uzupełnienie częściowo zaimplementowanych klauzul ochronnych w metodzie CheckScholarshipEligibility zgodnie z poniższymi zasadami:

  1. Jeśli wiek jest mniejszy niż 17, natychmiast zwróć "Not eligible due to age requirement"
  2. Jeśli GPA ≥ 3.5 ORAZ student ma rekomendację, przyznaj pełne stypendium
  3. Jeśli GPA ≥ 3.8, przyznaj pełne stypendium (nawet bez rekomendacji)
  4. Jeśli GPA ≥ 3.0 ORAZ student ma rekomendację, przyznaj częściowe stypendium
  5. Jeśli GPA mieści się w przedziale od 3.5 do 3.8, przyznaj częściowe stypendium
  6. We wszystkich pozostałych przypadkach zwróć "Not eligible for scholarship"

Spróbuj swoich sił

using System;

class Program
{
    public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
    {
        // Warunek wstępny dotyczący wymaganego wieku
        if (age < 17)
        {
            Console.WriteLine("Not eligible due to age requirement.");
            return;
        }
        
        // Warunek wstępny przyznania pełnego stypendium przy posiadaniu rekomendacji
        if (/* Uzupełnij ten warunek */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Warunek wstępny przyznania pełnego stypendium przy wyjątkowo wysokim GPA
        if (/* Uzupełnij ten warunek */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Warunek wstępny przyznania częściowego stypendium przy posiadaniu rekomendacji
        if (/* Uzupełnij ten warunek */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Warunek wstępny przyznania częściowego stypendium przy dobrym GPA
        if (/* Uzupełnij ten warunek */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Przypadek domyślny: brak uprawnień do stypendium
        Console.WriteLine("Not eligible for scholarship.");
    }
    
    static void Main(string[] args)
    {
        // Przypadki testowe zapewniające natychmiastową informację zwrotną
        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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C# online