0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kotlin ネストしたクラスを外に出してみる

Last updated at Posted at 2021-01-19

 金田著「はじめてのandroidプログラミング 第5版」を使って、勉強しています。

 「第8章タイマーを使ってスライドショーを実装する」で使っているテクニックを解析してみます。
 今日のテーマは、ネストした(入れ子になった)クラスを外に出してみるです。初心者にとって、クラスの中にクラスが入れ子になって入っていると、違和感を感じませんか。そこでネストしたクラスを外に出してみます。
 
 以下、本書を持っている前提で説明します。本書を使って勉強中の方、一緒に勉強しましょう。

0.前提

 p224まで写経が済んでいるとします。

1.原型

 p224まで写経が済んでいる状態のコードを示します。説明に不要な部分は、著作権に配慮して省略しています。
 MainActivityクラスの中に、MyAdapterクラスがネスト(入れ子)になっています。これはMyAdapterクラスがMainActivityクラスでしか使わないためです。この説明は、本書には書かれていないようです。参考としてJosh Skeen著 吉川監訳 「Kotlinプログラミング」のp242に書かれています。

MainActivity.kt
class MainActivity : AppCompatActivity() {

    // MainActivityクラスの中にMyAdapterクラスをネスト(入れ子にする)
    class MyAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
        // 省略
    }

    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        // 省略
        binding.pager.adapter = MyAdapter(this)
    }
}

2.入れ子になったクラスを外に出す

 初心者には、クラスの中にクラスがあると、ぱっと見、慣れていないと違和感を感じます。このため入れ子になったMyAdapterクラスを外に出してみます。また出されたMyAdapterクラスは、ファイルの外部から見える必要がないので可視性をprivateに変更しました。この説明は和訳版kotlinリファレンスの可視性修飾子に書かれています。

MainActivity.kt
class MainActivity : AppCompatActivity() {
    // ネストクラス
    // class MyAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
    //     // 省略
    // }

    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        // 省略
        binding.pager.adapter = MyAdapter(this)
    }
}

// MyAdapterクラスをMainActivityクラスの外に出す
private class MyAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
    // 省略
}

 ネストクラスは、コードの可読性、クラスの可視性(カプセル化)を高める目的で使われますが、慣れていない人は、逆に、試しにネストしたクラスを外に出して、意味を確認しながらネストクラスに慣れていきましょう。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?