Wczesne zwroty
Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 18 z 66.
Wczesne zwroty to technika polegająca na opuszczeniu metody, gdy tylko uzyskamy odpowiedź lub napotkamy nieprawidłowy warunek, zamiast zagnieżdżać instrukcje warunkowe.
Porównajmy dwa podejścia do walidacji nazwy użytkownika:
Bez wczesnych zwrotów (zagnieżdżone instrukcje warunkowe):
public bool ValidateUsername(string username)
{
bool isValid = false;
if (username != null)
{
if (username.Length >= 3)
{
if (username.Length <= 20)
{
isValid = true;
}
}
}
return isValid;
}Z wczesnymi zwrotami:
public bool ValidateUsername(string username)
{
// Zwróć wynik od razu, jeśli username ma wartość null
if (username == null)
return false;
// Zwróć wynik od razu, jeśli username jest zbyt krótka
if (username.Length < 3)
return false;
// Zwróć wynik od razu, jeśli username jest zbyt długa
if (username.Length > 20)
return false;
// Jeśli dotarliśmy tutaj, username jest poprawna
return true;
}Wczesne zwroty sprawiają, że kod jest bardziej czytelny i zmniejszają poziom wcięć.
Wyzwanie
ŁatwyNapisz metodę o nazwie ProcessPayment, która określa, czy płatność może zostać przetworzona, na podstawie następujących warunków:
- Kwota płatności musi być dodatnia
- Saldo konta musi być wystarczające
- Konto nie może być zablokowane
Użyj wczesnych instrukcji return, aby sprawdzić każdy warunek i zwrócić odpowiednie komunikaty o błędach.
Metoda powinna:
- Przyjmować trzy parametry:
decimal paymentAmount,decimal accountBalanceibool isAccountLocked - Zwracać ciąg znaków zawierający albo "Payment processed successfully", albo komunikat o błędzie
- Używać wczesnych instrukcji return do walidacji
Wyświetlaj komunikaty o błędach dokładnie w następujących formatach:
- "Error: Payment amount must be positive"
- "Error: Insufficient funds"
- "Error: Account is locked"
Spróbuj swoich sił
using System;
public class Program
{
public static string ProcessPayment(decimal paymentAmount, decimal accountBalance, bool isAccountLocked)
{
// Wpisz tutaj swój kod
}
public static void Main(string[] args)
{
decimal paymentAmount = decimal.Parse(Console.ReadLine());
decimal accountBalance = decimal.Parse(Console.ReadLine());
bool isAccountLocked = bool.Parse(Console.ReadLine());
string result = ProcessPayment(paymentAmount, accountBalance, isAccountLocked);
Console.WriteLine(result);
}
}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