🙆
サンプルコードの中にuseが現れた!どうする? ▶︎ useを学習する
サンプルコード
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