Bezpieczne wywołanie ?. i Elvis ?: w rzeczywistym kodzie
Łącz bezpieczne wywołania i podawaj wartości zastępcze za pomocą operatora Elvis.
Bezpieczne wywołanie ?. i Elvis ?: w rzeczywistym kodzie to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 2 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.
Dwa operatory o dużym znaczeniu
Bezpieczne wywołanie ?. wywołuje składową tylko wtedy, gdy receiver nie ma wartości null. Operator Elvis ?: udostępnia wartość zastępczą, gdy lewa strona ma wartość null.
Podstawy bezpiecznego wywołania
x?.member ma wartość null, jeśli x ma wartość null; w przeciwnym razie uzyskuje dostęp do member w zwykły sposób.
fun main() {
val name: String? = "Kotlin"
val len: Int? = name?.length
println(len) // 6
val nope: String? = null
println(nope?.length) // null
}Podstawy operatora Elvis
x ?: default zwraca x, jeśli nie ma ono wartości null, a w przeciwnym razie zwraca znajdujące się po prawej stronie default.
fun main() {
val name: String? = null
val display = name ?: "Anonymous"
println(display) // Anonymous
}Łączenie bezpiecznego wywołania i operatora Elvis
Typowy idiom: obj?.member ?: default — odczytaj wartość lub użyj wartości zastępczej.
fun main() {
val name: String? = null
val length = name?.length ?: 0
println("length = $length") // 0
}Łączenie bezpiecznych wywołań
Łącz ?. na wielu poziomach — całe wyrażenie przyjmuje wartość null, jeśli którekolwiek ogniwo ma wartość null.
class Address(val city: String?)
class User(val address: Address?)
fun main() {
val u: User? = User(Address(null))
val city = u?.address?.city ?: "Unknown"
println(city) // Unknown
}Wyjątek po prawej stronie operatora Elvis
Prawa strona operatora Elvis może zawierać dowolne wyrażenie, w tym throw — jest to przydatne podczas sprawdzania wymaganych wartości.
fun loadConfig(path: String?): String {
val p = path ?: throw IllegalArgumentException("path required")
return "loaded $p"
}
fun main() {
println(loadConfig("/etc/app"))
// loadConfig(null) // throws
}Bezpieczne wywołanie metod
Bezpieczne wywołania działają z dowolną metodą, nie tylko z dostępem do właściwości.
fun main() {
val raw: String? = " hello "
val cleaned = raw?.trim()?.uppercase() ?: ""
println(cleaned) // HELLO
}Bezpieczne wywołanie w warunkach
Bezpiecznych wywołań można używać wewnątrz warunków. Połącz je z operatorem Elvis, aby zapewnić domyślne wartości logiczne.
fun main() {
val name: String? = "Alice"
if (name?.startsWith("A") == true) {
println("Starts with A")
}
}Operator Elvis z return
Użyj operatora Elvis z return w klauzulach ochronnych: zakończ działanie wcześniej, jeśli wymagana wartość ma wartość null.
fun process(input: String?) {
val safe = input ?: return
println("processing $safe")
}
fun main() {
process("abc")
process(null) // returns silently
}Operator Elvis z continue/break
Wewnątrz pętli operator Elvis może skrótowo przejść do continue lub break, upraszczając obsługę wartości null.
fun main() {
val items: List<String?> = listOf("a", null, "b", null, "c")
for (item in items) {
val v = item ?: continue
print("$v ")
}
println() // a b c
}Praktyka: wyszukiwanie konfiguracji
Bezpieczne wywołanie i operator Elvis można połączyć w jednym wierszu, aby odczytać opcjonalną konfigurację z wartością domyślną.
class Config(val timeoutMs: Int?, val host: String?)
fun main() {
val cfg: Config? = Config(null, "prod.example.com")
val timeout = cfg?.timeoutMs ?: 5000
val host = cfg?.host ?: "localhost"
println("$host @ $timeout ms")
}Szybkie sprawdzenie
Jaką wartość przyjmie user?.email ?: "unknown", gdy user ma wartość null?
Podsumowanie
Łącz bezpieczne wywołanie (?.) i operator Elvis (?:), aby pisać zwięzły kod bezpieczny pod względem null. Używaj operatora Elvis z throw lub return w klauzulach ochronnych, które kończą działanie po wykryciu brakujących danych.
Często zadawane pytania
Czy lekcja „Bezpieczne wywołanie ?. i Elvis ?: w rzeczywistym kodzie” jest bezpłatna?
Tak — pełny tekst „Bezpieczne wywołanie ?. i Elvis ?: w rzeczywistym kodzie” 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 „Bezpieczne wywołanie ?. i Elvis ?: w rzeczywistym kodzie”?
Łącz bezpieczne wywołania i podawaj wartości zastępcze za pomocą operatora Elvis. Ć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 2 z 4.
Ile czasu zajmuje lekcja „Bezpieczne wywołanie ?. i Elvis ?: w rzeczywistym kodzie”?
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ć