Programowanie defensywne
Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 34 z 66.
Programowanie defensywne to technika, która pomaga zapobiegać błędom spowodowanym przez odwołania null. Polega na sprawdzaniu, czy wartości są null, przed próbą użycia obiektów.
Przed użyciem obiektu sprawdź, czy ma wartość null:
string name = GetNameFromSomewhere();
// Kontrola zabezpieczająca
if (name == null)
{
// Obsłuż przypadek wartości null
name = "Default Name";
}
// Teraz można bezpiecznie użyć name
Console.WriteLine(name.ToUpper());Weryfikuj parametry w metodach:
public void ProcessOrder(Order order)
{
// Kontrola zabezpieczająca przed parametrem o wartości null
if (order == null)
{
Console.WriteLine("Error: Order cannot be null");
return;
}
// Teraz można bezpiecznie przetworzyć zamówienie
Console.WriteLine("Processing order: " + order.Id);
}Użyj operatora warunkowego dostępu (?.), aby uprościć sprawdzanie wartości null:
Customer customer = GetCustomerFromSomewhere();
// Zamiast:
// string city = null;
// if (customer != null && customer.Address != null)
// {
// city = customer.Address.City;
// }
// Użyj tego:
string city = customer?.Address?.City;Wyzwanie
ŁatwyUtwórz metodę o nazwie ProcessUserData, która przyjmuje parametr będący ciągiem znaków userData. Metoda powinna:
- Sprawdzić, czy
userDatama wartość null — jeśli tak, wypisać "Error: User data is null" i zakończyć działanie. - Sprawdzić, czy
userDatajest pusty — jeśli tak, wypisać "Error: User data is empty" i zakończyć działanie. - Jeśli dane są prawidłowe, zamienić je na wielkie litery i wypisać "Processing: [UPPERCASE_DATA]".
Spróbuj swoich sił
using System;
class ProcessUserData
{
public static void processUserData(string userData)
{
// Wskazówka: ciąg znaków "null" należy traktować jak rzeczywistą wartość null
// Wpisz tutaj swój kod
}
}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