🙆

サンプルコードの中にuseが現れた!どうする? ▶︎ useを学習する

2022/10/21に公開約900字

サンプルコード

val file = File("/path/to/hogehoge.txt")
file.bufferedReader().use {
  println(it.read())
}

サンプルコードの中にuseが現れた!どうする?

useを学習する

useの定義を見てみる

useの定義
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R { ... }
呼び出し方
// 何かはCloseable (何か.close()が呼び出せる)
何か.use { it:何か -> 
  ...
}

useの実装を見てみる

useの実装
// 大事なところだけ
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
  try{
    // blockを実行する
    return block()
  } catch (e: Throwable) {
    // エラーが発生したらそれを再度throwする
    exception = e
    throw e
  } finally{
    // エラーが発生してもしなくてもcloseする
    close()
  }
}

Closeableをuseで呼び出すと何がいいの?

useで囲んんだら囲んだブロック({から})を呼び出した後 必ずclose()されます。 これにより、「呼び出した後必ずclose()してね!」といったクラスを使うときにエラー発生の有無に関わらずclose()してくれます。

use、完全に理解した!

⭐️⭐️⭐️これであなたもKotlinレベルアップです⭐️⭐️⭐️


java経験者の方へ

Kotlinのuseはjavaで言うcatchしないtry-with-resourceです

python経験者の方へ

Kotlinのuseはpythonで言うwith句です

Discussion

ログインするとコメントできます