0Pricing
Kotlin Academy · Lekcja

let, also i run z odbiorcami dopuszczającymi null

Używaj funkcji zakresu do wykonywania kodu tylko wtedy, gdy wartość nie jest null.

let, also i run z odbiorcami dopuszczającymi null to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 3 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.

Funkcje zakresu i wartości nullable

Funkcje zakresu let, also i run świetnie łączą się z bezpiecznym wywołaniem ?., aby wykonywać blok tylko wtedy, gdy receiver nie ma wartości null.

let z bezpiecznym wywołaniem

obj?.let { ... } wykonuje blok tylko wtedy, gdy obj nie ma wartości null; wewnątrz it odnosi się do wartości non-null.

fun main() {
    val name: String? = "Kotlin"
    name?.let {
        println("Length: ${it.length}")
        println("Upper: ${it.uppercase()}")
    }
}

let pomija blok dla wartości null

Jeśli receiver ma wartość null, cały blok let zostaje pominięty.

fun main() {
    val name: String? = null
    val result = name?.let {
        println("never printed")
        it.length
    }
    println(result) // null
}

let zwraca wartość

let zwraca ostatnie wyrażenie swojego bloku — można je łączyć z operatorem Elvis, aby zapewniać wartości domyślne.

fun main() {
    val raw: String? = "  hello "
    val cleaned = raw?.let { it.trim().uppercase() } ?: "(empty)"
    println(cleaned) // HELLO
}

also do efektów ubocznych

also wykonuje blok dla jego efektów ubocznych i zwraca pierwotny receiver — świetnie nadaje się do rejestrowania informacji w potoku.

fun main() {
    val name: String? = "Alice"
    val len = name?.also { println("Processing: $it") }?.length
    println("len = $len")
}

also zachowuje wartość

W przeciwieństwie do let, also zwraca receiver bez zmian. Używaj go, gdy chcesz podejrzeć wartość bez jej przekształcania.

fun main() {
    val items: List<Int>? = listOf(1, 2, 3)
    items?.also { println("Got list of size ${it.size}") }
           ?.forEach { println(it) }
}

run z bezpiecznym wywołaniem

obj?.run { ... } wykonuje blok z receiverem przypisanym do this. Użyj go, gdy chcesz uzyskać dostęp do składowych bez prefiksu it..

fun main() {
    val name: String? = "Kotlin"
    val info = name?.run {
        "len=$length upper=${uppercase()}"
    }
    println(info)
}

let a run

let używa it (argumentu lambdy), a run używa this (receivera). Wybierz wariant, który zapewnia lepszą czytelność.

class User(val name: String, val age: Int)
fun main() {
    val user: User? = User("Ada", 35)
    user?.let { "${it.name} age ${it.age}" }.also(::println)
    user?.run { "$name age $age" }.also(::println)
}

Łączenie wielu zakresów

Łącz funkcje zakresu w potoku, aby stopniowo przekształcać dane i rejestrować informacje.

fun main() {
    val raw: String? = "  hello  "
    val result = raw
        ?.also { println("raw: '$it'") }
        ?.let { it.trim() }
        ?.also { println("trimmed: '$it'") }
        ?.uppercase()
    println(result) // HELLO
}

let z takeIf

Połącz takeIf (filtrowanie) z let, aby wykonywać operacje na podstawie predykatu.

fun main() {
    val name: String? = "Kotlin"
    name?.takeIf { it.length > 3 }
        ?.let { println("Long name: $it") }
}

Antywzorzec: zagnieżdżone instrukcje if

Przed wprowadzeniem funkcji zakresu:

fun main() {
    val name: String? = "Alice"
    // OLD WAY:
    if (name != null) {
        val upper = name.uppercase()
        println(upper)
    }
    // NEW WAY:
    name?.let { println(it.uppercase()) }
}

Szybkie sprawdzenie

Która funkcja zakresu zwraca receiver bez zmian i służy głównie do wykonywania efektów ubocznych?

Podsumowanie

Połącz ?. z let (blok zwraca wartość i używa it), run (blok zwraca wartość i używa this) lub also (zwraca receiver i służy do efektów ubocznych). Wszystkie pomijają wykonanie, jeśli receiver ma wartość null.

Często zadawane pytania

Czy lekcja „let, also i run z odbiorcami dopuszczającymi null” jest bezpłatna?

Tak — pełny tekst „let, also i run z odbiorcami dopuszczającymi 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 Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „let, also i run z odbiorcami dopuszczającymi null”?

Używaj funkcji zakresu do wykonywania kodu tylko wtedy, gdy wartość nie jest null. Ć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 3 z 4.

Ile czasu zajmuje lekcja „let, also i run z odbiorcami dopuszczającymi 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 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

  1. Typy dopuszczające null i modyfikator ?
  2. Bezpieczne wywołanie ?. i Elvis ?: w rzeczywistym kodzie
  3. let, also i run z odbiorcami dopuszczającymi null
  4. Operator !!: kiedy i dlaczego go unikać
← Powrót do Kotlin Academy