0Pricing
Android Academy · Lekcja

Typy nullable a non-null

Znacznik typu ?.

Typy nullable a non-null to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 1 z 4. 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 Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.

Dlaczego bezpieczeństwo wartości null ma znaczenie

Wiele awarii aplikacji na Androida wynika z jednego błędu: użycia wartości, której w rzeczywistości brakuje. W innych językach kończy się to przerażającym wyjątkiem NullPointerException w czasie działania programu.

Kotlin wykrywa ten problem podczas kompilacji. System typów śledzi, które wartości mogą być null, a które nigdy nie mogą. Ta lekcja przedstawia podstawy tego systemu.

Typy nienullowalne

Domyślnie typ Kotlina nie może przechowywać wartości null. String zawsze wskazuje rzeczywisty napis.

Jeśli spróbujesz przypisać do niego null, kod nawet się nie skompiluje. To bezpieślne ustawienie domyślne.

fun main() {
    val name: String = "Ada"
    println(name.length)
}

Null jest odrzucane

Sprawdź, co się stanie, gdy spróbujesz umieścić null w typie nienullowalnym.

Kompilator zatrzyma Cię natychmiast. Błąd nie pozostanie ukryty aż do czasu działania programu.

val name: String = null  // Compile error:
// Null can not be a value of a non-null type String

Typy dopuszczające null z użyciem ?

Czasami wartości rzeczywiście może brakować, na przykład opcjonalnego drugiego imienia użytkownika. Wyraź to, dodając ? do typu.

String? może przechowywać rzeczywisty napis albo null. Znak zapytania oznacza, że typ dopuszcza wartość null.

fun main() {
    val middleName: String? = null
    println(middleName)
}

Dwa różne typy

String i String? nie są tym samym typem. Drugi z nich jest szerszym typem, który obejmuje wartość null.

To rozróżnienie pozwala kompilatorowi Cię chronić. Wie on dokładnie, gdzie może pojawić się null.

val sure: String = "hello"
val maybe: String? = "hello"
// maybe could later be null; sure never can

Nie można bezpośrednio używać typu dopuszczającego null

Kompilator nie pozwoli wywołać metody na wartości dopuszczającej null bez wcześniejszego sprawdzenia.

Ponieważ middleName może mieć wartość null, wywołanie na nim .length powoduje błąd kompilacji. Trzeba obsłużyć przypadek null.

val middleName: String? = null
println(middleName.length)
// Error: only safe (?.) or non-null (!!) calls allowed

Sprawdzanie za pomocą if

Najprostszym sposobem użycia wartości dopuszczającej null jest sprawdzenie jej za pomocą warunku if.

W gałęzi, w której potwierdzono, że wartość nie jest null, Kotlin wykonuje do niej smart cast na typ nienullowalny, dzięki czemu .length działa.

fun main() {
    val text: String? = "Kotlin"
    if (text != null) {
        println(text.length)
    }
}

Smart casty

Po pomyślnym sprawdzeniu wartości null kompilator pamięta, że wartość nie jest null w pozostałej części tego bloku. Nazywa się to smart castem.

Nie trzeba było wykonywać żadnej konwersji. Kotlin śledzi to automatycznie.

fun describe(s: String?) {
    if (s == null) return
    // s is now treated as String here
    println("Length is " + s.length)
}

Parametry funkcji

To, czy parametr dopuszcza wartość null, jest częścią kontraktu funkcji. Parametr nienullowalny zapewnia wywołującym, że nigdy nie otrzyma wartości null.

Parametr dopuszczający null sygnalizuje, że brak danych wejściowych jest przewidziany i obsługiwany.

fun greet(name: String) {
    println("Hi, " + name)
}
// greet(null) would not compile

Typy zwracane mogą dopuszczać null

Funkcja może zwrócić null, aby zasygnalizować, że niczego nie znaleziono. Oznacz jej typ zwracany za pomocą ?.

Wywołujący wiedzą wtedy, że muszą sprawdzić wynik przed jego użyciem.

fun firstChar(s: String): Char? {
    if (s.isEmpty()) return null
    return s[0]
}

Domyślnie wybieraj typy nienullowalne

Dobra zasada: preferuj typy nienullowalne. Dodawaj ? tylko wtedy, gdy wartości rzeczywiście może brakować.

Dzięki temu kod lepiej odzwierciedla założenia. Im mniej typów dopuszczających null, tym mniej sprawdzeń null będzie potrzebnych później.

// Prefer this:
val score: Int = 0
// Over this, unless null is meaningful:
val maybeScore: Int? = null

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat typów dopuszczających null i nienullowalnych.

Podsumowanie

Typy Kotlina są domyślnie nienullowalne i odrzucają null podczas kompilacji. Dodaj ?, aby typ dopuszczał null, gdy wartości może brakować.

Nie można bezpośrednio używać wartości dopuszczającej null. Sprawdzenie null wykonuje smart cast na typ nienullowalny, dzięki czemu można bezpiecznie użyć wartości. Następnie poznasz krótsze sposoby obsługi takich wartości.

Często zadawane pytania

Czy lekcja „Typy nullable a non-null” jest bezpłatna?

Tak — pełny tekst „Typy nullable a non-null” 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 Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Typy nullable a non-null”?

Znacznik typu ?. Ćwiczysz Android 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ąć Android Academy?

Nie wymagamy żadnego doświadczenia. Android 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 1 z 4.

Ile czasu zajmuje lekcja „Typy nullable a non-null”?

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 Android Academy?

Tak. Każda lekcja Android 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. Typy nullable a non-null
  2. Bezpieczne wywołania i Elvis
  3. let, also i funkcje zakresu
  4. Unikanie NullPointerExceptions
← Powrót do Android Academy