【Kotlin/Android】use関数の使い方!リソース(Closeable)の管理
この記事からわかること
- Android Studio/Kotlinでuse関数の使い方
- リソース(Closeable)を安全に管理する方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
use関数とは?
use関数はリソースの管理を安全に操作するための拡張関数です。ここでいうリソースとはファイル操作やデータベース接続などCloseable
を継承したクラスのことです。
例えばファイルへの書き込み処理を行うFileWriter
などは継承元を辿るとCloseable
があることを確認できます。Closeable
なクラスを使用する際は役割を終えたタイミングで適切にリソースを解放する必要があります。
use
関数を使用しない場合はstream
を取得して操作が終了したらclose
メソッドを呼び出してストリームを閉じます。適切にclose
メソッドが呼ばれない場合リソースリーク(リソースが解放されずに残ってしまう)を引き起こしてしまいます。
try {
// ファイルへの書き込み
val stream = FileWriter(file)
try {
stream.write(text)
} finally {
stream.close()
}
} catch (e: IOException) {
Log.d("Error","保存失敗")
}
use関数の使い方
先ほどの実装をuse
関数を使用すると以下のようにスッキリ記述することができます。ラムダ式の引数でstream
を参照でき、ブロックが終了すると自動で閉じられます。これは正常に成功した場合でも例外を吐いた場合でも閉じてくれるのでリソースの解放を意識する必要がなくなります。
try {
// ファイルへの書き込み
FileWriter(file).use { stream -> stream.write(text) }
} catch (e: IOException) {
Log.d("Error","保存失敗")
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。