Part14: プロパティ

ことり「今日はプロパティのお話です。実は、もう出てきてるんだけどね」

Umi Sonoda
16

ことり「umi.nameとかumi.ageみたいに、そのインスタンスの持っているデータに直接アクセスする(ように見える)書き方は、前回までのサンプルコードにありました」
凛「今の括弧書きは何にゃ?」
ことり「すぐにわかるよ♪」

ことり「Kotlinには、他の言語のフィールドとかメンバ変数とかはありません。それっぽく見えるのは全部プロパティです」
凛「それって何が違うの?」
ことり「たとえばJavaとかC++とかだと、データメンバに直接アクセスするのを避けてgetNamesetNamegetAgesetAgeみたいなメソッドを作るのが一般的なの」
凛「それはめんどくさいにゃ・・・」
ことり「だから、Kotlinではそれがいらないように、値を取得するgetterと値を設定するsetterが自動的に生成されます。umi.nameは実はgetter関数の呼び出しなの」
凛「それって、ただ値を返すだけの関数があるっていうこと?」
ことり「うん。もちろん、それは自分で定義することもできて」

UMI SONODA
UMI SONODA

ことり「名前は大文字にして返すとか、名前に何を指定しても海未ちゃんになるとか」
凛「Umi Kosakaの曖昧性はまあ置いておくとして」
ことり「こんなふうに、プロパティは入出力をコントロールできます。ちなみにfieldが、バッキングフィールドって呼ばれるプロパティの値そのもので、getterとsetterの中だけでアクセスできるよ」

ことり「varで宣言されたプロパティはgetterとsetter両方が、valで宣言されたプロパティはgetterだけが利用できます」
凛「valの方は変更不可だもんね」

ことり「最後に、遅延初期化、かな。普通はインスタンスを作るときにプロパティの値を指定しないといけないけど、それを後から設定できるようにします」

ことり「lateinitがついたgroupプロパティは、コンストラクタで値を受け取ってないよね。でもこんなふうにインスタンスを作ることができて、後から値を設定できます」


ことり「プロパティについては、そんなに難しい内容じゃないと思うけど」
凛「とりあえずgetterとsetterが勝手にできるって覚えればよさそうだにゃ」
ことり「それは、ちょっと雑だけど・・・まあ、そのうちわかるよ。次回は、インターフェイスの話をしますね」


LINEで送る
Pocket


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です