👏

Kotlinでリソースの後処理はuseでシンプルに書こう

2024/08/22に公開

Kotlinでclose処理を必要とするリソースを使う場合はuseで!!

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/use.html

Executes the given block function on this resource and then closes it down correctly whether an exception is thrown or not.

Closeableインターフェースへの拡張関数として定義されており、
引数に渡したblock処理を行いリソースを例外発生、正常終了問わずクローズしてくれます。

useの実装としては内部にtry-catchを隠蔽してくれており、例外補足時はclose()メソッドを呼んでくれるような作りになっています。

Javaだと

sample.java
try (BufferedReader br = new BufferedReader(new FileReader("text.txt"))) {
    br.readLine();
}

kotlinでは

sample.kt
BufferedReader(FileReader("text.txt")).use {
    it.readLine()
}

記述量的にはさほど変わりませんが、コードリーディングという点では対象リソースを使用して処理をするというロジックの本質部分に集中して読むことができるという点で認知負荷も低く是非活用していきたい拡張関数だと思いました。

Discussion