0Pricing
C# Academy · Lekcja

Wzorce walidacji i Guard

Proszę wcześnie weryfikować dane wejściowe za pomocą klauzul ochronnych, zgłaszać właściwe wyjątki oraz stosować kontrole w stylu TryParse dla danych użytkownika.

Wzorce walidacji i Guard to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Dlaczego klauzule ochronne

Cel: Zachować bezpieczeństwo i czytelność metod.

  • Używaj klauzul ochronnych na początku metody
  • Rzucaj określone typy wyjątków (ArgumentNullException, ArgumentOutOfRangeException)
  • Używaj TryParse dla danych wprowadzanych przez użytkownika
  • Kończ działanie natychmiast w razie błędu; unikaj głębokiego zagnieżdżania

Przykład wczesnych klauzul ochronnych

Dodaj na początku małe sprawdzenia poprawności argumentów; rzucaj określone typy wyjątków, aby kod wywołujący wiedział, co poszło nie tak.

using System;

// Demo: validate inputs at the top; keep main logic flat.
public class Program
{
  // Compute price with simple rules; guard early.
  public static decimal ComputePrice(string sku, int qty, decimal unitPrice)
  {
    if (sku == null) throw new ArgumentNullException("sku");
    if (sku.Length == 0) throw new ArgumentException("sku must not be empty", "sku");
    if (qty <= 0) throw new ArgumentOutOfRangeException("qty", "qty must be > 0");
    if (unitPrice < 0m) throw new ArgumentOutOfRangeException("unitPrice", "unitPrice must be >= 0");

    // Main logic stays simple
    decimal subtotal = qty * unitPrice;
    if (qty >= 10) subtotal = subtotal * 0.9m; // small bulk discount
    return subtotal;
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(ComputePrice("ABC", 2, 5m));   // ok
    try { Console.WriteLine(ComputePrice("", 2, 5m)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
  }
}

Klasa pomocnicza Guard

Wydziel wspólne sprawdzenia do niewielkiej klasy Guard, aby zachować czystość i spójność treści metod.

using System;

// Minimal static helper for common validations (beginner friendly).
public static class Guard
{
  public static void NotNull(object value, string name)
  {
    if (value == null) throw new ArgumentNullException(name);
  }

  public static void NotNullOrEmpty(string value, string name)
  {
    if (value == null) throw new ArgumentNullException(name);
    if (value.Length == 0) throw new ArgumentException(name + " must not be empty", name);
  }

  public static void InRange(int value, int minInclusive, int maxInclusive, string name)
  {
    if (value < minInclusive || value > maxInclusive)
      throw new ArgumentOutOfRangeException(name, "Expected " + minInclusive + ".." + maxInclusive);
  }
}

public class Program
{
  static int ScoreFor(string userId, int level)
  {
    Guard.NotNullOrEmpty(userId, "userId");
    Guard.InRange(level, 1, 10, "level");
    // pretend logic
    return level * 100;
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(ScoreFor("u42", 3));
    try { Console.WriteLine(ScoreFor(null, 3)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
  }
}

Walidacja za pomocą TryParse

W przypadku typowych nieprawidłowych danych wejściowych preferuj metody w stylu TryParse, które zwracają false zamiast rzucać wyjątkami.

using System;

// Use TryParse for user-provided text; avoid throwing for normal invalid input.
public class Program
{
  public static bool TryGetPort(string text, out int port)
  {
    port = 0;
    int value;
    if (!int.TryParse(text, out value)) return false;
    if (value < 1 || value > 65535) return false;
    port = value;
    return true;
  }

  public static void Main(string[] args)
  {
    int p;
    Console.WriteLine("8080 -> " + (TryGetPort("8080", out p) ? ("ok " + p) : "invalid"));
    Console.WriteLine("abc -> " + (TryGetPort("abc", out p) ? ("ok " + p) : "invalid"));
  }
}

Rzucać wyjątek czy zwracać wynik

  • Throw stosuj w przypadku błędów programisty (nieprawidłowe użycie API, niedozwolona wartość null, wartość spoza zakresu)
  • Return false/Result stosuj w przypadku typowych błędów użytkownika (nieprawidłowy tekst)
  • Używaj określonych typów wyjątków; dołączaj nazwę parametru
  • Waliduj od zewnątrz do środka: najpierw wykonuj tanie sprawdzenia

Najlepsze praktyki

Wskazówki:

  • Wykonuj walidację na granicach systemu (kontrolery, publiczne interfejsy API)
  • Preferuj małe metody ochronne zamiast głębokiego zagnieżdżania
  • Twórz krótkie i jasne komunikaty o błędach
  • Zapisuj błąd w logu raz na granicy systemu, a nie w każdej klauzuli ochronnej

Znaczenie klauzuli ochronnej

Szybkie sprawdzenie: które stwierdzenie najlepiej opisuje klauzulę ochronną?

Podsumowanie

Podsumowanie: Wykonuj wczesną walidację za pomocą klauzul ochronnych, rzucaj określone wyjątki w przypadku błędów programisty i używaj TryParse dla codziennych danych wejściowych użytkownika.

Często zadawane pytania

Czy lekcja „Wzorce walidacji i Guard” jest bezpłatna?

Tak — pełny tekst „Wzorce walidacji i Guard” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Wzorce walidacji i Guard”?

Proszę wcześnie weryfikować dane wejściowe za pomocą klauzul ochronnych, zgłaszać właściwe wyjątki oraz stosować kontrole w stylu TryParse dla danych użytkownika. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „Wzorce walidacji i Guard”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Abstrakcje logowania, Debug/Trace
  2. Podstawy profilowania i śladów (koncepcje)
  3. Wzorce walidacji i Guard
← Powrót do C# Academy