KotlinでAndroidアプリ#08クラス

クラス

Kotlinのクラス定義は次のようなイメージだ。

コンストラクタ

クラス定義とコンストラクタが一体化しており、コンストラクタの引数をクラス名の次に記述する。

もし引数が不要な場合はシンプルに記述できる。

プロパティ

Kotlinにはプロパティという概念がある。これはJavaのメンバー変数やgetter/setterに該当する。記述方法は変数の初期化と同様だ。

これら変数の初期化を行うことで、varの場合はgetter/setterメソッド、valの場合はgetterメソッドが生成される。これでひたすらgetter/setterメソッドを記述する苦行から解放されるというわけだ。

Javaでは引数をメンバー変数に転送する記述を行っていた。

Kotlinでは引数の代わりに変数定義することにより、プロパティの定義として扱われる。

これで引数からプロパティへの転送が不要になり、簡潔なコードとなる。

nullを許与したくないが初期値がない!

nullを許容したプロパティはその後null判定を意識してコードを記述しなければいけない。面倒なのでnullが設定されないプロパティはnullを許容すべきでない。

しかし定義時に初期値が決定していないプロパティは困りものだ。初期値がないためnullを設定するとnullを許容していると見なされる(あたりまえか・・)。このため必要のないnull判定のコードを意識して記述しなきゃいけなくなる。面倒だ。

こんな時のために「lateinit」という命令がある。これを使うと初期化を後回しにできるのだ。これでnullにならなく初期値がないプロパティの定義ができる。

コンストラクタの処理

コンストラクタに処理を記述する場合は、initブロックを作成し、そこに記述する。

プログラム作成

ここまでの確認のためにクラスSubを作成し、利用側のコードをMainActivityに記述してみる。

画面右側のエクスプローラーからパッケージを選択し右クリック->New->Kotlin File/Classを選択。

パネルが開くのでClassを選択しクラス名(Sub)を入力


クラスSubに次の記述を行う。

MainActiviに11,12行を追加しクラスSubをインスタンス化、プロパティをログ出力する。

クラスのインスタンス化ではNewが不要になった。

プロパティにアクセスする際にはgetter/setterメソッドを呼び出すことなく、直接プロパティ名を記述すればよい。

Javaの不満を解消するために登場した言語とあって、すっきりと記述できるようになった。

この他にgetter/setterメソッドのカスタマイズ、コンストラクタの追加などできるが、それは別途学習する。

前へ<ーーー>つづく

タイトルとURLをコピーしました