0
0

More than 3 years have passed since last update.

[Kotlin] Result型

Posted at

KotlinのResult型の存在を知ったので、勉強メモ
公式はこちら

Result型とは

Kotlin1.3からstdlibに登場した型です

RustやScalaにも同じ名前の方がありますが、Kotlinのものは特殊で、メソッドの戻り値にすることができないという特徴があります
したがって、「例外を返すかもしれないからなんとかして!」というメッセージをメソッド間で伝える、という使い方はできません[^reason]

例えば、Rustではこんな使い方ができます
Result型を使えば、呼び出し元にエラーハンドリングを強制できます

/**
 * 引数が偶数ならば2で割った数、奇数ならばエラーを返す
 */
fn devideBy2(x: i32) -> Result<i32,&'static str> {
    if x % 2 == 0 {
        Ok(x / 2)
    } else {
        Err("error message")
    }
}

fn main() {
    let x = // 何かしら代入

    match devideBy2(x) {
        Ok(result) => println!("number: {}", result),
        Err(msg) => println!("error: {}", msg),
    }
}

残念ながらKotlinではこのような使い方ができません
理由は、将来の拡張でResultのセマンティックが変わる可能性が高いからだそうです。ぜひ早く対応して欲しいですね!

...が、なんとList>など、単なるResult型でなければ関数の返り値にすることができます
失敗したやつを呼び出し元でまとめて処理したい場合に使えます

他にも

  • 非同期処理のコールバックの引数
  • 関数内で失敗時の処理を強制する

などのユースケースがあるようです

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0