KotlinのLocal Function
2019-02-02 17:37:47 +0900 JST
Categories: Android
人間の設計というのはワガママで、このへんまとめて一つの関数にできるぐらいなんだけど、ここでしか使わないんだよなぁ・・・という時があります。
そんな時に使えるのがKotlinの Local Function というものです。
簡単にいうと、関数の中に関数を定義できます。
例えばAPIにデータを更新かけに行く時、APIのレスポンスを待ってUIの更新をすることが多いでしょう。 ですが、APIのレスポンスを待たずにUIの更新をかければユーザーは待たされることなくユーザー体験をより良いものとすることができます。
この時のUI処理はどちらも同じことをやるでしょう。これが1行で済めば良いのですが、たまに値の変換やソートをかける必要がある場合、同じ処理を2回書かなければならなくなります。
fun update(udateData: Any) {
// APIを待たずにUI反映
hoge(udateData)
huga(udateData)
api.call(updateData) { response ->
response.ok?.let { data ->
// APIのレスポンスをUIに反映
hoge(data)
huga(data)
}
response.error?.let {
// エラー処理
}
}
}
ではこれをLocal Functionでまとめてみましょう。
Local Functionは呼び出す時より前に定義する必要があります。
fun update(udateData: Any) {
// このへんがLocal Function
fun updateUI(data: Any) {
hoge(data)
huga(data)
}
// APIを待たずにUI反映
updateUI(updateData)
api.call(updateData) { response ->
response.ok?.let { data ->
// APIのレスポンスをUIに反映
updateUI(data)
}
response.error?.let {
// エラー処理
}
}
}
このLocal Functionはスコープがupdate()の中なので、これより外の関数やクラスはupdateUIを呼び出すことはできません。まさにこの関数限定の関数という感じですね。
公式のリファレンスには特にバージョンいくつからと書いてないのでもしかしたら1.0.0の時点でLocal Functionが使えてたのかもしれません。
Functions/ infix, vararg, tailrec - Kotlin Programming Language