0
0

More than 3 years have passed since last update.

alsoを使ってインスタンスの初期化処理をスッキリさせる(Kotlin)

Posted at

はじめに

スコープ関数のひとつである 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 の使いどころを紹介しました。
他にも有用な例や使いどころがあれば、教えていただけると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0