Menu
Coddy logo textTech

Wprowadzenie do bezpieczeństwa wartości null

Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 23 z 110.

Jednym z najczęstszych źródeł błędów w programowaniu jest próba użycia wartości, która nie istnieje. W Dart ten szczególny „brak wartości” jest reprezentowany przez null. Funkcja bezpieczeństwa wartości null w Dart pomaga wychwycić te błędy, zanim kod zostanie uruchomiony.

Bez bezpieczeństwa null każda zmienna może potencjalnie mieć wartość null, co prowadzi do awarii w czasie wykonywania, gdy próbujesz jej użyć:

// W starszych wersjach Dart (bez ochrony przed null)
String name;  // Może mieć wartość null!
print(name.length);  // Program ulegnie awarii, jeśli name ma wartość null

Przy włączonym bezpieczeństwie nullowalności (Dart 2.12+) kompilator rozróżnia zmienne, które mogą przechowywać wartość null, od tych, które nie mogą. Domyślnie zmienne są nienullowalne — zawsze muszą zawierać prawidłową wartość:

String name = 'Alice';  // Musi mieć wartość
print(name.length);     // Bezpieczne — name nigdy nie ma wartości null

Kompilator odmówi skompilowania kodu, w którym zmienna nieprzyjmująca wartości null może mieć wartość null. Dzięki temu błędy są wykrywane podczas kompilacji, a nie w czasie wykonywania, co zwiększa niezawodność Twoich programów. W kolejnych lekcjach dowiesz się, jak deklarować typy dopuszczające wartość null, gdy naprawdę ich potrzebujesz, oraz poznasz operatory, które Dart udostępnia do bezpiecznej pracy z wartościami, które potencjalnie mogą być null.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty system wizytówek kontaktowych, który pokazuje, jak ważne są zmienne nieprzyjmujące wartości null. Stworzysz system, w którym każdy kontakt musi zawierać prawidłowe, gwarantowane informacje.

Podzielisz kod na dwa pliki:

  • contact.dart: Zdefiniuj klasę Contact, która reprezentuje informacje kontaktowe danej osoby. Ponieważ korzystamy z bezpieczeństwa null, każde pole musi mieć prawidłową wartość — brakujących danych nie dopuszczamy! Twoja klasa powinna zawierać:
    • String firstName — imię kontaktu
    • String lastName — nazwisko kontaktu
    • String email — adres e-mail kontaktu
    • int phoneDigits — liczbę cyfr w numerze telefonu
    • Konstruktor przyjmujący wszystkie cztery wartości
    • Getter fullName, który zwraca imię i nazwisko połączone spacją
    • Metodę displayCard(), która wyświetla informacje o kontakcie
  • main.dart: Zaimportuj klasę kontaktu i utwórz dwa kontakty, aby pokazać, że wszystkie pola mają zagwarantowane wartości:
    • Utwórz kontakt o imieniu 'Emma', nazwisku 'Wilson', adresie e-mail 'emma@mail.com' i liczbie cyfr w numerze telefonu 10
    • Utwórz kontakt o imieniu 'James', nazwisku 'Brown', adresie e-mail 'james@work.com' i liczbie cyfr w numerze telefonu 11
    • Wywołaj displayCard() dla każdego kontaktu w podanej wyżej kolejności

Metoda displayCard() powinna wyświetlać dane dokładnie w tym formacie:

--- Contact Card ---
Name: [fullName]
Email: [email]
Phone digits: [phoneDigits]

Zauważ, że każda zmienna musi zostać zainicjalizowana rzeczywistą wartością — tak działa bezpieczeństwo null! Kompilator gwarantuje, że gdy uzyskasz dostęp do fullName, email lub dowolnego innego pola, będzie ono zawsze zawierać prawidłowe dane.

Oczekiwany wynik:

--- Contact Card ---
Name: Emma Wilson
Email: emma@mail.com
Phone digits: 10
--- Contact Card ---
Name: James Brown
Email: james@work.com
Phone digits: 11

Spróbuj swoich sił

import 'contact.dart';

void main() {
  // TODO: Utwórz pierwszy kontakt z następującymi danymi:
  // - imię: 'Emma'
  // - nazwisko: 'Wilson'
  // - adres e-mail: 'emma@mail.com'
  // - liczba cyfr numeru telefonu: 10

  // TODO: Utwórz drugi kontakt z następującymi danymi:
  // - imię: 'James'
  // - nazwisko: 'Brown'
  // - adres e-mail: 'james@work.com'
  // - liczba cyfr numeru telefonu: 11

  // TODO: Wywołaj displayCard() kolejno dla każdego kontaktu
}
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Dart online