0Pricing
Android Academy · Lekcja

Bezpieczne wywołania i Elvis

Operatory ?. i ?:.

Bezpieczne wywołania i Elvis to bezpłatna lekcja Android 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 Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.

Więcej niż sprawdzanie za pomocą if

Sprawdzanie każdej wartości dopuszczającej null za pomocą if działa, ale szybko staje się rozwlekłe. Kotlin oferuje zwięzłe operatory przeznaczone do obsługi wartości null.

W tej lekcji omówimy operator bezpiecznego wywołania ?. oraz operator Elvis ?: — dwa narzędzia, których będzie Pan/Pani używać bardzo często.

Operator bezpiecznego wywołania

Operator ?. wywołuje metodę tylko wtedy, gdy wartość nie jest null. Jeśli jest null, całe wyrażenie zwraca null zamiast powodować awarię.

To bezpieczny skrót dla schematu „jeśli nie jest null”.

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

Bezpieczne wywołanie dla null

Gdy odbiorca ma wartość null, bezpieczne wywołanie kończy działanie i zwraca null. Nie jest zgłaszany żaden wyjątek.

W tym przykładzie wypisywanym wynikiem jest słowo null, a nie awaria programu.

fun main() {
    val name: String? = null
    println(name?.length)  // prints: null
}

Łączenie bezpiecznych wywołań

Można łączyć ?. w kilku kolejnych krokach. Jeśli dowolne ogniwo ma wartość null, cały łańcuch zatrzymuje się i zwraca null.

To idealne rozwiązanie do poruszania się po zagnieżdżonych opcjonalnych danych.

class Address(val city: String?)
class User(val address: Address?)

fun cityOf(u: User?): String? {
    return u?.address?.city
}

Operator Elvis

Operator Elvis ?: dostarcza wartość zastępczą, gdy lewa strona ma wartość null. Jego nazwa pochodzi od fryzury piosenkarza, którą przypomina ten symbol.

Należy go czytać jako: użyj lewej wartości, a jeśli jej nie ma, użyj prawej.

fun main() {
    val name: String? = null
    val shown = name ?: "Guest"
    println(shown)  // prints: Guest
}

Elvis z bezpiecznymi wywołaniami

Bezpieczne wywołanie i operator Elvis świetnie ze sobą współpracują. Użyj ?., aby dotrzeć do wartości, oraz ?:, aby podać wartość domyślną, jeśli gdzieś wystąpiło null.

Ten wzorzec zamienia wynik dopuszczający null w wartość, która na pewno nie jest null.

fun main() {
    val name: String? = null
    val len: Int = name?.length ?: 0
    println(len)  // prints: 0
}

Przykład długości z wartością domyślną

Typem wyniku jest zwykły Int, a nie Int?. Operator Elvis usunął możliwość wystąpienia null.

Po użyciu ?: z nienullowalną wartością zastępczą kompilator wie, że wartość nigdy nie będzie null.

val title: String? = "Kotlin"
val length: Int = title?.length ?: 0
// length is a non-null Int

Elvis do wczesnego zwracania

Ponieważ return i throw są w Kotlinie wyrażeniami, można umieścić je po prawej stronie operatora Elvis.

To przejrzysty sposób na wcześniejsze zakończenie działania, gdy brakuje wymaganej wartości.

fun process(input: String?) {
    val text = input ?: return
    println(text.uppercase())
}

Bezpieczne wywołanie z let

Połącz ?. z let, aby wykonać blok tylko wtedy, gdy wartość nie jest null. Wewnątrz bloku wartość jest nienullowalna i nosi nazwę it.

To często stosowany idiom do pracy z opcjonalnymi wartościami.

fun main() {
    val email: String? = "a@b.com"
    email?.let {
        println("Sending to " + it)
    }
}

Połączenie wszystkiego

Krótki program może pokazać, jak bezpieczne wywołanie i operator Elvis współpracują przy tworzeniu przyjaznego komunikatu.

Zwróć uwagę, że nie jest potrzebna instrukcja if, a kod nigdy nie stwarza ryzyka awarii z powodu null.

fun main() {
    val nickname: String? = null
    val display = nickname?.uppercase() ?: "ANONYMOUS"
    println(display)
}

Kiedy używać którego operatora

Użyj ?., gdy chcesz, aby wynik null był bezpiecznie przekazywany dalej. Użyj ?:, gdy chcesz zastąpić null konkretną wartością domyślną.

Razem pokrywają zdecydowaną większość codziennych przypadków obsługi null bez rozwlekłych sprawdzeń.

val count = list?.size ?: 0
// safe call reads size, Elvis defaults to 0

Szybkie sprawdzenie

Sprawdź swoją znajomość bezpiecznych wywołań i operatora Elvis.

Podsumowanie

Bezpieczne wywołanie ?. wywołuje składową tylko wtedy, gdy odbiorca nie jest null; w przeciwnym razie zwraca null. Operator Elvis ?: zastępuje null wartością zastępczą.

Łączenie tych operatorów w przejrzysty sposób usuwa możliwość wystąpienia null. Następnie dokładniej poznasz funkcje zakresu, takie jak let i also.

Często zadawane pytania

Czy lekcja „Bezpieczne wywołania i Elvis” jest bezpłatna?

Tak — pełny tekst „Bezpieczne wywołania i Elvis” 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 „Bezpieczne wywołania i Elvis”?

Operatory ?. i ?:. Ć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 2 z 4.

Ile czasu zajmuje lekcja „Bezpieczne wywołania i Elvis”?

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