0Pricing
Kotlin Academy · Lekcja

with

Grupuj operacje

with 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.

Funkcja with

with to funkcja zakresowa, która przyjmuje obiekt jako argument (a nie jako odbiorcę wywołania) i wykonuje blok, w którym ten obiekt jest dostępny jako this. Zwraca wynik lambdy.

Podstawowe użycie with

Przekazują Państwo obiekt do with, a następnie uzyskują bezpośredni dostęp do jego składowych wewnątrz bloku.

fun main() {
    val name = "Kotlin"
    val description = with(name) {
        "$this has $length characters"
    }
    println(description)
}

Grupowanie wielu operacji

with sprawdza się szczególnie wtedy, gdy trzeba wywołać kilka metod lub odczytać kilka właściwości tego samego obiektu. Pozwala uniknąć wielokrotnego powtarzania nazwy obiektu.

fun main() {
    val sb = StringBuilder()
    with(sb) {
        append("Line 1\n")
        append("Line 2\n")
        append("Line 3")
    }
    println(sb)
}

with używa this

Podobnie jak run i apply, with udostępnia obiekt jako this, dlatego dostęp do składowych nie wymaga prefiksu.

data class Rectangle(val width: Int, val height: Int)

fun main() {
    val rect = Rectangle(4, 5)
    val area = with(rect) {
        width * height
    }
    println("Area: $area")
}

with zwraca wynik lambdy

Wartość ostatniego wyrażenia w bloku staje się wynikiem with, podobnie jak w przypadku run.

fun main() {
    val list = listOf(1, 2, 3, 4, 5)
    val summary = with(list) {
        "Size=$size, First=${first()}, Last=${last()}"
    }
    println(summary)
}

with a run

with(obj) { ... } i obj.run { ... } robią niemal to samo. Różnica dotyczy składni:

  • run jest rozszerzeniem wywoływanym na obiekcie, dlatego dobrze współpracuje z bezpiecznymi wywołaniami.
  • with przyjmuje obiekt jako argument i można je naturalnie odczytać jako „z tym obiektem wykonaj...”.
fun main() {
    val s = "data"
    val a = with(s) { uppercase() }
    val b = s.run { uppercase() }
    println("$a $b")
}

with nie służy do wartości nullowalnych

Ponieważ obiekt jest przekazywany jako argument, with nie łączy się dobrze z operatorem bezpiecznego wywołania. W przypadku odbiorców dopuszczających null należy preferować obj?.run { } lub obj?.let { }.

fun main() {
    val name: String? = "Eve"
    name?.run { println("Hello $this") }
    println("with is awkward for nullables")
}

Jednoczesne odczytywanie i obliczanie

Typowy wzorzec polega na odczytaniu kilku właściwości i obliczeniu pojedynczego wyniku — wszystko w jednym czytelnym bloku.

data class Order(val items: Int, val pricePerItem: Int)

fun main() {
    val order = Order(3, 20)
    val total = with(order) {
        items * pricePerItem
    }
    println("Total: $total")
}

Budowanie ciągów znaków za pomocą with

W połączeniu z buildString lub StringBuilder funkcja with pozwala tworzyć przejrzysty kod budujący bez prefiksów.

fun main() {
    val report = StringBuilder()
    with(report) {
        appendLine("Report")
        appendLine("======")
        appendLine("All good")
    }
    print(report)
}

with na kolekcji

Mogą Państwo wywołać wiele funkcji kolekcji na tej samej liście bez powtarzania jej nazwy.

fun main() {
    val numbers = listOf(10, 20, 30)
    with(numbers) {
        println("Sum: ${sum()}")
        println("Max: ${max()}")
        println("Average: ${average()}")
    }
}

Kiedy używać with

Wybierz with, gdy masz niepusty obiekt i chcesz wykonać na nim grupę operacji, opcjonalnie zwracając wynik. Sygnalizuje ono: „przez chwilę pracuję z tym obiektem”.

Szybki test

W jaki sposób with otrzymuje obiekt?

Podsumowanie

with grupuje operacje na jednym niepustym obiekcie przekazanym jako argument, udostępnia go jako this i zwraca wynik lambdy. Działa podobnie jak run, ale używa składni z argumentem. W następnej części dowiedzą się Państwo, jak wybrać odpowiednią funkcję zakresową w każdej sytuacji.

Często zadawane pytania

Czy lekcja „with” jest bezpłatna?

Tak — pełny tekst „with” 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 „with”?

Grupuj operacje Ć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 „with”?

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. let i run
  2. apply i also
  3. with
  4. Wybór właściwej funkcji
← Powrót do Kotlin Academy