0Pricing
Kotlin Academy · Lekcja

runCatching

Przechwytuj wyjątki jako wartości

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

Przechwytywanie wyjątków

runCatching wykonuje blok i opakowuje jego wynik w Result: zwracana wartość staje się sukcesem, a każdy rzucony wyjątek staje się niepowodzeniem. Nie jest potrzebne try/catch.

Podstawowe użycie

Przekaż lambdę; ostatnie wyrażenie staje się wartością sukcesu.

fun main() {
    val r = runCatching { 10 / 2 }
    println(r.isSuccess)
    println(r.getOrNull())
}

Przechwytywanie rzuconego błędu

Gdy blok rzuca wyjątek, runCatching zapisuje go zamiast przekazywać dalej.

fun main() {
    val r = runCatching { 10 / 0 }
    println(r.isFailure)
    println(r.exceptionOrNull()?.message)
}

Opakowywanie ryzykownego parsowania

Typowym zastosowaniem jest opakowywanie wywołań, które mogą rzucać wyjątki, takich jak parsowanie, aby niepowodzenie stało się wartością możliwą do obsłużenia.

fun main() {
    val good = runCatching { "42".toInt() }
    val bad = runCatching { "abc".toInt() }
    println(good.getOrNull())
    println(bad.getOrNull())
}

runCatching jako odbiornik

Można wywołać runCatching na obiekcie odbiornika; wewnątrz bloku this odnosi się do tego obiektu. Jest to przydatne przy łączeniu operacji wykonywanych na wartości.

fun main() {
    val text = "  99 "
    val r = text.runCatching { trim().toInt() }
    println(r.getOrNull())
}

Odzyskiwanie w miejscu

Połącz z getOrElse, aby podać wartość zastępczą bezpośrednio w miejscu wywołania.

fun main() {
    val n = runCatching { "oops".toInt() }.getOrElse { -1 }
    println(n)
}

fold dla obu gałęzi

fold obsługuje sukces i niepowodzenie w jednym wywołaniu, zwracając pojedynczą wartość z jednej z tych gałęzi.

fun main() {
    val message = runCatching { "50".toInt() }.fold(
        onSuccess = { "got " + it },
        onFailure = { "error: " + it.message }
    )
    println(message)
}

Refaktoryzacja try/catch

W miejscach, w których można byłoby napisać try/catch zwracające wartość, runCatching jest bardziej zwięzłe i zachowuje wynik jako dane.

fun safeDivide(a: Int, b: Int): Result<Int> =
    runCatching { a / b }

fun main() {
    println(safeDivide(8, 2).getOrNull())
    println(safeDivide(8, 0).exceptionOrNull()?.message)
}

Uwaga na zbyt szerokie przechwytywanie

runCatching przechwytuje wszystkie obiekty Throwables, w tym takie, których nie należy ignorować. Należy unikać opakowywania dużych bloków; przechwytywany obszar powinien być mały i celowo wybrany.

Łączenie transformacji

Ponieważ runCatching zwraca Result, można od razu połączyć z nim map lub recover. Zostaną one omówione na następnej lekcji.

fun main() {
    val r = runCatching { "7".toInt() }.map { it * 10 }
    println(r.getOrNull())
}

Dlaczego to pomaga

runCatching łączy kod rzucający wyjątki ze światem opartym na wartościach Result. Pozwala stosować funkcyjną obsługę błędów nawet podczas wywoływania interfejsów API, które rzucają wyjątki.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat runCatching.

Podsumowanie

Poznano runCatching:

  • Opakowuje wynik bloku w Result
  • Przekształca rzucone wyjątki w niepowodzenia
  • Można je łączyć z getOrElse i fold
  • Należy utrzymywać mały zakres przechwytywania

Następnie: tworzenie hierarchii wyników sealed.

Często zadawane pytania

Czy lekcja „runCatching” jest bezpłatna?

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

Przechwytuj wyjątki jako wartości Ć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 „runCatching”?

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. Typ Result
  2. runCatching
  3. Zapieczętowane hierarchie Result
  4. Funkcjonalna obsługa błędów
← Powrót do Kotlin Academy