kotlin

kotlin基本構文-クラス,プロパティ,アクセス修飾子,コンストラクタ

投稿日:

言語仕様に拘りがあるタイプではなさそうで、かなり平易。

クラスの定義

public,private修飾子を指定したメソッドを持つクラスを定義してみる。
インスタンス化はnewが要らないんだな。

気になるのは、アクセス修飾子が無いときの振る舞い。
デフォルトのアクセス修飾子はprivateではなくpublic。
Javaのデフォルトのアクセス修飾子は"package内のみ"だった。

メンバ変数とプロパティ

Delphiで便利だったプロパティ。getter,setterを文法で解決する。
まずメンバ変数は以下の通り普通に定義できる。
これは後述するgetter,setterを省略した書き方。

ageというメンバ変数に対してsetterを定義する。
外部からageというメンバ変数に値を代入する際に定義したsetterが呼ばれる。
異常値の入力値チェックが出来たりする。
getter,setterを文法で解決したメンバ変数をプロパティと言ってるらしい。
getter,setterでメンバ変数を参照する際、selfを使わずfieldという予約語を使う様子。
backing fieldという名前が付いてる。

なお、プロパティを変数(var)ではなく定数(val)で定義すると、読み取り専用プロパティになる。

プロパティの初期値を設定せず、コンストラクタでも代入しなかった場合はインスタンス化時にエラーとなる。
abstractクラスならOK。

プロパティのsetterにアクセス修飾子を指定できる。
public修飾子がついたプロパティのsetterにprivate修飾子をつけると、
クラス内部からはsetter経由で値を変更できるが、外部からは変更できなくなる。

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

コンストラクタはinit予約語の後に書く。コンストラクタのパラメタはinitに書かずclassに書く。
コンストラクタのパラメタがclassに付いているのでinit以外でも使ってしまいそうになるがinitでしか使えない。
コンストラクタに渡した文字列を使ってメンバ変数を初期化してみる。

この書き方は、constructor予約語が省略されたものであって、
constructor予約語を省略しない場合は以下のようになる。

コンストラクタの実行とメンバ変数の初期化を一度に書くのは以下。

アクセス修飾子までコンストラクタに含められる。

さらにデフォルト値を含められる。

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

2つ以上のコンストラクタを書くときのやり方。
2つ目以降は順当にconstructor予約語を書いていく。
ほとんどの場合コンストラクタは1個だから1つ目のコンストラクタを簡易な方法でかけるようになっているのかな。

:thisというのは、プライマリコンストラクタを呼び出す書式。
ブロックの先頭に書くのではなく専用の書式がある。
セカンダリコンストラクタはプライマリコンストラクタを必ず呼ばなければならない。

-kotlin
-

Copyright© ikuty.com , 2018 AllRights Reserved Powered by AFFINGER4.