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ć.
Wyzwanie
ŁatwySprawdzanie 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:
- Jeśli wiek jest mniejszy niż 17, natychmiast zwróć "Not eligible due to age requirement"
- Jeśli GPA ≥ 3.5 ORAZ student ma rekomendację, przyznaj pełne stypendium
- Jeśli GPA ≥ 3.8, przyznaj pełne stypendium (nawet bez rekomendacji)
- Jeśli GPA ≥ 3.0 ORAZ student ma rekomendację, przyznaj częściowe stypendium
- Jeśli GPA mieści się w przedziale od 3.5 do 3.8, przyznaj częściowe stypendium
- 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);
}
}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
1Tablice wielowymiarowe
Podstawy tablic 2DDeklarowanie i inicjalizacja tablic 2DDostęp do elementów tablic 2DZagnieżdżone pętle z tablicami 2DTablice postrzępionePodstawowe operacje na macierzachPodsumowanie — tablice wielowymiarowe4Techniki sterowania przepływem
Wczesne zwrotyKlauzule ochronneInstrukcje skoku (goto)Break i continueSpłaszczanie zagnieżdżonych warunków7Zaawansowane operatory logiczne
Ewaluacja z krótkim spięciemWarunkowe operatory logicznePriorytet operatorówPowtórzenie — zaawansowane operatory2Zaawansowane podejmowanie decyzji
Wiele warunkówZłożona logika Boole’aPorównanie if i switchZagnieżdżone instrukcje switchPodsumowanie — zaawansowane decyzje5Obsługa wyjątków
Podstawy try-catchTypy wyjątkówWiele bloków catchPraca z plikamiBlok finallyusing a try-finallyWłasne wyjątkiPowtórzenie — obsługa błędów3Udoskonalenia pętli
Wydajność pętliIterowanie po złożonych strukturachKażdy typ pętliRefaktoryzacja pętliPodsumowanie — zoptymalizowane pętle6Obsługa wartości null
Podstawy referencji nullTypy wartości dopuszczające nullWzorce sprawdzania nullProgramowanie defensywnePodsumowanie — bezpieczeństwo nullPoćwicz samodzielnie: Kompilator C# online