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:
runjest rozszerzeniem wywoływanym na obiekcie, dlatego dobrze współpracuje z bezpiecznymi wywołaniami.withprzyjmuje 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.