0Pricing
Kotlin Academy · レッスン

Result型

成功と失敗をモデル化します

「Result型」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

成功または失敗

多くの操作は失敗する可能性があります。Kotlinの Result 型は、値を保持する成功か、例外を保持する失敗のいずれかとなる結果を、例外をスローせずに表現します。

成功の作成

Result.success(value) を使うと、値を成功した結果としてラップできます。

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

失敗の作成

Result.failure(exception) を使うと、エラーを表現できます。アンラップすることを選ぶまで、例外はスローされません。

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

getOrNull と exceptionOrNull

結果を安全に調べることができます。getOrNull() は値または null を返し、exceptionOrNull() はエラーまたは null を返します。

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

getOrDefault

getOrDefault を使うと、失敗時の代替値を指定できます。適切なデフォルト値がある場合は、null チェックよりも簡潔です。

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 は例外から代替値を計算するため、エラーの種類に応じて異なる対応ができます。

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

例外を取得したい場合、getOrThrow() は値を返し、保存されている例外を再スローします。

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

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

Resultを返す

関数は Result を返すことで、シグネチャ上で失敗を明示できます。これにより、呼び出し側は両方の結果に対応する必要があります。

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と例外の比較

例外はシグネチャからは分からず、制御フローを中断します。Result では、失敗を他の値と同じように渡したり変換したりできる値として扱います。明示的で、組み合わせやすく、見過ごしにくい方法です。

Resultを使う場合

呼び出し側に処理させたい、回復可能で予期される失敗には Result を使用します。契約違反のような、本当に例外的なプログラミングエラーの場合は、引き続き例外をスローしてください。

ジャンプではなく値

重要な転換点は、エラーを通常の戻り値にすることです。次は、スローされた例外を自動的に Result に取り込む runCatching について学びます。

理解度チェック

Result 型についての理解度を確認しましょう。

まとめ

Result 型について学びました。

  • Result.success / Result.failure で作成する
  • getOrNull、exceptionOrNull で調べる
  • getOrDefault、getOrElse、getOrThrow で復旧する
  • 返り値として使用し、失敗を明示する

次は runCatching です。

よくある質問

「Result型」レッスンは無料ですか?

はい。「Result型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「Result型」で何を学びますか?

成功と失敗をモデル化します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Result型」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Result型
  2. runCatching
  3. SealedなResult階層
  4. 関数型エラーハンドリング
← Kotlin Academyに戻る