Part21: オブジェクト

ことり「ちかるび(妹系)」
凛「だいよし(残念系)」
ことり「ようかな(船系)」
凛「まるりこまり(天然系)」

ことり「なんとなく、Aqoursのデュエットシングルを予想してみました」
凛「投票あったらこれでいくにゃ!」


ことり「今回はオブジェクトのお話です。Javaだと無名クラスとかで実現してた言語機能だね」

ことり「継承を前提としたクラス、あるよね。abstractだったり、openだったり」
凛「abstractだと継承しないとインスタンス作れないよね」
ことり「だけど、サブクラスをいちいち定義するのは面倒なことがあります。1回しか使わない場合とかね」
凛「凛は面倒なのは嫌いにゃ」
ことり「そこで、オブジェクト式の出番です」

ことり「Idolクラスはabstractだからインスタンスは作れません。本来だったら、classIdolを継承したスクールアイドルクラスみたいなクラスを定義してそのインスタンスを作るんだけど、この例みたいにインスタンス1つ使い捨てるだけならやりすぎだよね」
凛「穂乃果ちゃん、使い捨てるの・・・?」
ことり「んー、ことほのは需要あるから、そーだなー・・・」
凛「そこはきっぱり否定してほしかったにゃ!」
ことり「それはともかく、objectってキーワードを使って、クラスを定義することなくインスタンスを作れます」
凛「インスタンス作るときにabstractな関数を実装する感じ?」
ことり「そうそう。これは実際には、イベント駆動型プログラミングでイベントリスナを作るのに使ったりとかが多いみたい」

ことり「インターフェイスも実装したい場合はこう。カンマで区切って書けばいいの」

ことり「継承は実は必須じゃなくて」

ことり「何も継承しないオブジェクトっていうのも作れますよ」
凛「う~ん、嬉しいのかなぁ?」
ことり「特にGUIとかのコード書くときはすごくありがたみがあると思うよ」

ことり「オブジェクト宣言っていう、式じゃなくて宣言でオブジェクトを定義する方法があって、これはシングルトンの実装をすごく楽にしてくれます」
凛「しんぐるとん?」
ことり「普通、1つのクラスからはいくつでもインスタンスを作れるけど、それを1つだけしか作れなくするデザインパターンがシングルトン。これがKotlinだとすごく楽なの」

ことり「こうすると、LoveLiveEntryManagerオブジェクトはシステムに1つだけ。簡単だよね」

ことり「オブジェクト宣言はクラスの中にも書けて、その場合はコンパニオンオブジェクトって呼びます」

ことり「ファクトリに使うことが多いのかな。companionってキーワードをつけて宣言します」
凛「これ、SchoolIdol.Factory.create()にならないの?」
ことり「コンパニオンオブジェクトの名前はいらないの。だから実は、Factoryって名前をつける必要もないんだよ」
凛「なんかちょっと変な感じするにゃ」
ことり「コンパニオンオブジェクト自身がほしい場合は、SchoolIdol.Companionって書くとアクセスできます」


ことり「次回はデリゲートかな。オブジェクト指向の話は、一区切りつくはずだよ」
凛「凛はこう見えても繊細だから優しく教えてほしいにゃ」
ことり(突っ込んだら負け・・・)


LINEで送る
Pocket


コメントを残す

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