iOS開発者のKotlin入門その4(クラス)

botman3 Android

はじめに

その3の続きです。クラスについて書きます。

クラス宣言

クラス宣言は下記。

コンストラクタ

プライマリコンストラクタ

クラスは1つのプライマリコンストラクタを持つことができる。(Swift でいうイニシャライザ?だと思う)

プライマリコンストラクタがアノテーションや可視性修飾子を持っていない場合は、 constructor キーワードを省略することがでる。

プライマリコンストラクタにコードを含めることはできないので、初期化コードは init キーワードの初期化ブロック内に記述する。

コンストラクタの引数に val, var を付けることでそのままプロパティとして保持することができる。

セカンダリコンストラクタ

constructor キーワードをつけてセカンダリコンストラクタを宣言できる。セカンダリコンストラクタはプライマリコンストラクタ床となり複数持つことが可能で中にコードを記載できる。

プライマリコンストラクタを保つ場合はセカンダリコンストラクタでプライマリコンストラクタを呼ぶ必要がある。

プロパティ

プロパティにはゲッター、セッターといったアクセサがあり実際の値はバッキングフィールドという変数(field 識別子)に格納されている。(あんまわかってない。。。)

詳しくはリファレンス

継承

クラスの継承

Kotlin のすべてのクラスは Any クラスを継承しているらしい。

継承するクラスには open 修飾子が必要である。(Swift もデフォルト final にしてほしい)
スーパークラスにプライマリコンストラクタがある場合はスーパクラスのコンストラクタを明示する必要がある。

メソッドのオーバーライド

メソッドをオーバーライドする場合も open 修飾子が必要。

プロパティもオーバーライドすることができる。

override はそれ自身が open なのでサブクラスにオーバーライドさせたくない場合は final 修飾子をつけます。

インターフェイス

インターフェイスはたぶん Swift でいうプロトコルだと思う。

プロパティを持たせたり、関数にデフォルト実装を行うこともできる

抽象クラス

メソッドなどの実装をクラスに強制させるにはインターフェイス以外にも抽象クラスを使う方法がある。(たぶんSwiftにはない概念)
抽象クラスには abstract 修飾子を付ける。

データクラス

データ表現用クラス。Swiftでいう構造体のような感じかも?(ちょっと違う気もするど)
class の前に data をつけるとデータクラスになる。

データクラスは equals, hashCode, toString, copy 関数を自動で実装してくれる。

比較(equals(), hashCode())

例えば通常のクラスでユーザー型を作った場合、2つのユーザーが同一か比較するには下記のように equalshashCode を実装する必要がある。
hashCode の実装に関しては下記参考。
Kotlin data classのhashCodeの実装

データクラスの場合は必要ない。

ログ出力(toString())

通常のクラスの場合

データクラスの場合

コピー(copy())

データのコピーをする際もデータクラスは下記のように copy 関数を自動実装してくれる。

copy 関数を使うと次のように一部の値のみを書き換えたデータを簡単に作成できる。

列挙型クラス

基本形

プロパティを持たせる

Swiftの下記のようなことはできないみたい

関数を持たせる

列挙型クラスには下記の関数とプロパティが実装されている

オブジェクト

object キーワードというものがあり、以下3つの場面で利用するらしい。

オブジェクト宣言

シングルトンオブジェクトを作成するときに使う。

コンパニオンオブジェクト

クラスにstaticメソッドやプロパティを持たせたいときに使う。

これを使うと private 関数にアクセスできるので下記のようなことができるらしい。

オブジェクト式

無名クラスを作成できる?これはちょっとよくわかってない。。。

参考:30分で覚えるKotlin文法

さいごに

これで Kotlin については一通り完成!と思ったけどあとは軽くコーディング規約について書こうと思います。

参考

コメント

  1. […] その4の続きです。コーディング規約について書きます。 基本的には下記参考 Kotlin スタイルガイド […]

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