Typy dopuszczające null i modyfikator ?
Deklaruj zmienne dopuszczające null i poznaj bezpieczeństwo null w Kotlinie na etapie kompilacji.
Typy dopuszczające null i modyfikator ? to bezpłatna lekcja Kotlin 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 Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Bezpieczeństwo null w Kotlinie
Kotlin rozróżnia typy, które mogą przechowywać null, od tych, które nie mogą — już na etapie kompilacji. Kompilator zapobiega większości wyjątków NullPointerException jeszcze przed uruchomieniem programu.
Typ non-null
Domyślnie typ w Kotlinie nie może mieć wartości null. Jeśli spróbujesz przypisać null, kompilator odmówi kompilacji.
fun main() {
val name: String = "Ada"
// val nope: String = null // ERROR
println(name)
}Typ nullable z ?
Dodaj ?, aby dopuścić wartość null. Kompilator traktuje wtedy zmienną jako opcjonalnie nieobecną.
fun main() {
val name: String? = null
println(name) // null
}Wywoływanie metod na wartościach nullable
Nie można bezpośrednio wywołać metody na wartości nullable bez wcześniejszej obsługi przypadku null. Kompilator odmówi kompilacji.
fun main() {
val name: String? = "Bob"
// println(name.length) // ERROR — name might be null
if (name != null) println(name.length) // smart cast
}Rzutowania inteligentne
Po sprawdzeniu if (x != null) Kotlin wykonuje w tej gałęzi inteligentne rzutowanie x na typ non-null.
fun main() {
val name: String? = "Alice"
if (name != null) {
println("Length: ${name.length}") // safe, smart-cast
} else {
println("No name")
}
}Parametr funkcji nullable
Oznacz parametry funkcji jako nullable, gdy mogą być nieobecne. Wywołujący musi jawnie przekazać wartość albo null.
fun greet(name: String?) {
if (name == null) println("Hello, stranger")
else println("Hello, $name")
}
fun main() {
greet("Sara")
greet(null)
}Typ zwracany nullable
Funkcja zwracająca X? informuje wywołującego, że może zwrócić null — wywołujący musi to obsłużyć.
fun findUser(id: Int): String? {
return if (id == 1) "Alice" else null
}
fun main() {
val u = findUser(2)
println(u ?: "no user")
}Właściwości nullable
Właściwości klas również mogą być nullable. Jest to częste, gdy pola są uzupełniane później lub pobierane opcjonalnie.
data class Profile(
val name: String,
val avatarUrl: String?
)
fun main() {
val p = Profile("Lee", null)
println(p.avatarUrl ?: "(no avatar)")
}Kolekcje nullable
Rozróżniaj listę nullable List<T>? od listy wartości nullable List<T?>. Oznaczają różne rzeczy.
fun main() {
val maybeList: List<Int>? = null
val listOfMaybe: List<Int?> = listOf(1, null, 3)
println(maybeList?.size) // null
println(listOfMaybe.size) // 3
}Porównanie z Javą
Typy Javy przekraczające granicę Kotlinu pojawiają się jako typy platformowe (String!) — Kotlin ufa programiście, ale nie zapewnia bezpieczeństwa null. Jeśli to możliwe, zawsze opatruj API Javy adnotacjami @Nullable/@NotNull.
fun main() {
val maybeNull: String? = System.getenv("FOO") // null if unset
println("env FOO = ${maybeNull ?: "(unset)"}")
}Dlaczego to ma znaczenie
Bezpieczeństwo null w czasie kompilacji zapobiega całej klasie awarii w czasie działania. Korzystaj z modyfikatora ? — dokumentuje on intencję i wymusza obsługę wartości null.
fun divide(a: Int, b: Int): Int? = if (b == 0) null else a / b
fun main() {
val r1 = divide(10, 2) // 5
val r2 = divide(10, 0) // null — handled at call site
println("$r1, $r2")
}Szybkie sprawdzenie
Co oznacza ? na końcu deklaracji typu?
Podsumowanie
Domyślnie typy w Kotlinie nie dopuszczają wartości null. Dodaj ?, aby na nią zezwolić. Kompilator wymusza obsługę null za pomocą inteligentnych rzutowań, bezpiecznych wywołań i operatora Elvis — zapobiegając większości wyjątków NullPointerException jeszcze przed uruchomieniem programu.
Często zadawane pytania
Czy lekcja „Typy dopuszczające null i modyfikator ?” jest bezpłatna?
Tak — pełny tekst „Typy dopuszczające null i modyfikator ?” 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 Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Typy dopuszczające null i modyfikator ?”?
Deklaruj zmienne dopuszczające null i poznaj bezpieczeństwo null w Kotlinie na etapie kompilacji. Ćwiczysz Kotlin 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ąć Kotlin Academy?
Nie wymagamy żadnego doświadczenia. Kotlin 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 dopuszczające null i modyfikator ?”?
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 Kotlin Academy?
Tak. Każda lekcja Kotlin 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
- Typy dopuszczające null i modyfikator ?
- Bezpieczne wywołanie ?. i Elvis ?: w rzeczywistym kodzie
- let, also i run z odbiorcami dopuszczającymi null
- Operator !!: kiedy i dlaczego go unikać