Kotlin Academy · Lekcja

Typ Result

Modeluj powodzenie i niepowodzenie

Lekcja 1 z 413 kroki

Typ Result to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 1 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.

Sukces lub niepowodzenie

Wiele operacji może zakończyć się niepowodzeniem. Typ Result w Kotlinie modeluje wynik, który jest albo sukcesem zawierającym wartość, albo niepowodzeniem zawierającym wyjątek — bez rzucania wyjątku.

Tworzenie sukcesu

Owiń wartość w pomyślny wynik za pomocą Result.success(value).

fun main() {
    val r: Result<Int> = Result.success(42)
    println(r.isSuccess)
    println(r.getOrNull())
}

Tworzenie niepowodzenia

Reprezentuj błąd za pomocą Result.failure(exception). Wyjątek nie zostanie rzucony, dopóki nie zdecydujesz się go rozpakować.

fun main() {
    val r: Result<Int> = Result.failure(IllegalStateException("bad"))
    println(r.isFailure)
    println(r.exceptionOrNull()?.message)
}

getOrNull i exceptionOrNull

Sprawdzaj wynik bezpiecznie: getOrNull() zwraca wartość albo null, a exceptionOrNull() zwraca błąd albo null.

fun main() {
    val ok = Result.success("hi")
    val bad = Result.failure<String>(RuntimeException("oops"))
    println(ok.getOrNull())
    println(bad.exceptionOrNull()?.message)
}

getOrDefault

Podaj wartość zastępczą dla niepowodzeń za pomocą getOrDefault. Jest to czytelniejsze niż sprawdzanie wartości null, gdy istnieje sensowna wartość domyślna.

fun main() {
    val bad: Result<Int> = Result.failure(Exception())
    println(bad.getOrDefault(0))
    val ok: Result<Int> = Result.success(7)
    println(ok.getOrDefault(0))
}

getOrElse

getOrElse oblicza wartość zastępczą na podstawie wyjątku, dzięki czemu można różnie reagować na różne błędy.

fun main() {
    val r: Result<Int> = Result.failure(IllegalArgumentException("nope"))
    val value = r.getOrElse { e -> if (e is IllegalArgumentException) -1 else -2 }
    println(value)
}

getOrThrow

Jeśli potrzebujesz wyjątku, getOrThrow() zwraca wartość albo ponownie rzuca zapisany wyjątek.

fun main() {
    val ok = Result.success(10)
    println(ok.getOrThrow())

    try {
        Result.failure<Int>(IllegalStateException("fail")).getOrThrow()
    } catch (e: Exception) {
        println("caught: " + e.message)
    }
}

Zwracanie wyniku Result

Funkcja może zwracać Result, aby jawnie uwzględnić możliwość niepowodzenia w swoim podpisie i wymusić na wywołujących obsługę obu wyników.

fun parse(s: String): Result<Int> {
    val n = s.toIntOrNull()
    return if (n != null) Result.success(n)
           else Result.failure(NumberFormatException(s))
}

fun main() {
    println(parse("123").getOrNull())
    println(parse("x").exceptionOrNull()?.message)
}

Result a wyjątki

Wyjątki są niewidoczne w podpisach i zakłócają przepływ sterowania. Result sprawia, że niepowodzenie staje się wartością, którą można przekazywać i przekształcać tak jak każdą inną — jawnie, w sposób umożliwiający komponowanie i trudno ją zignorować.

Kiedy używać Result

Używaj Result w przypadku możliwych do obsłużenia, oczekiwanych niepowodzeń, które mają być obsługiwane przez wywołujących. Wyjątki należy nadal rzucać w naprawdę wyjątkowych sytuacjach wynikających z błędów programisty, takich jak naruszenie kontraktu.

Wartość, nie skok

Najważniejsza zmiana polega na tym, że błąd staje się zwykłą wartością zwracaną. Następnie poznasz runCatching, które automatycznie przechwytuje rzucone wyjątki do obiektu Result.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat typu Result.

Podsumowanie

Poznano typ Result:

  • Tworzenie za pomocą Result.success / Result.failure
  • Sprawdzanie za pomocą getOrNull, exceptionOrNull
  • Odzyskiwanie za pomocą getOrDefault, getOrElse, getOrThrow
  • Zwracanie go w celu jawnego uwzględnienia niepowodzenia

Następnie: runCatching.

Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Typ Result” jest bezpłatna?

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

Modeluj powodzenie i niepowodzenie Ć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 1 z 4.

Ile czasu zajmuje lekcja „Typ Result”?

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