はじめに
スコープ関数のひとつである also
を使って、インスタンスの初期化処理をスッキリさせる方法を紹介します。
私が投稿したスコープ関数についての記事を先に読んでいただけると嬉しいです。
環境
- Kotlin:1.3.61
インスタンスの初期化処理
also
を使わなくても問題はない
まず、 also
を使わない処理を紹介します。
△alsoを使わなくても問題はない
fun newInstance(columnCount: Int): MonsterListFragment {
val bundle = Bundle()
bundle.putInt(ARG_COLUMN_COUNT, columnCount)
val fragment = MonsterListFragment()
fragment.arguments = bundle
return fragment
}
Swiftなどのプログラミング言語にはスコープ関数がなく、このような書き方が一般的だと思います。
このままでも特に問題はありません。
also
を入れ子にすると読みづらい
次に、 also
を入れ子にしてワンライナーで表現します。
入れ子にすると it
がどれを指しているかわかりづらいため、別名を付けています。
△alsoを入れ子にすると読みづらい
fun newInstance(columnCount: Int) =
MonsterListFragment().also { fragment ->
fragment.arguments = Bundle().also { bundle ->
bundle.putInt(ARG_COLUMN_COUNT, columnCount)
}
}
これで読みやすい人もいると思いますが、個人的には読みづらいです。
Kotlinのスコープ関数に慣れていない人が読むなら、なおさら読みづらいと思います。
also
を入れ子にしないで使うと読みやすい
最後に、 also
を入れ子にしないで使ってみます。
○alsoを入れ子にしないで使うと読みやすい
fun newInstance(columnCount: Int): MonsterListFragment {
val bundle = Bundle().also { it.putInt(ARG_COLUMN_COUNT, columnCount) }
return MonsterListFragment().also { it.arguments = bundle }
}
行数が少ないこともあり、最も読みやすく感じます。
おわりに
簡単な例ではありますが、 also
の使いどころを紹介しました。
他にも有用な例や使いどころがあれば、教えていただけると嬉しいです。