Part33: リフレクション

ことり「~~♪」
凛「ねえねえ、それ何の曲?μ'sとかAqoursの曲じゃないよね。ことりちゃんのオリジナルかにゃ?」
ことり「うん、これはね、うっちーの曲」
凛(しまった、メタな領域に突っ込んでしまったにゃ・・・)
ことり「8月に武道館でライブがあるから、予習してるの。ことりも聴きに行くんです♪」
凛「・・・凛もりっぴーのイベント行ってみようかな・・・」


ことり「・・・と、メタな話になったところで、今日のお題はリフレクション。メタプログラミングのお話しです」
凛「伏線だったんだ・・・」
ことり「凛ちゃんはElixirのマクロとかは知ってるよね。あのメタプログラミングとはまた勝手が違うんだけど、実行時にプログラムの構造にアクセスする手段です」

ことり「まず最初に、一番基本的なクラスの情報を参照するのをやってみるね」

SchoolIdol

ことり「これはクラスの名前を取得するコード。SchoolIdol::classって書くと、 KClass のインスタンスが取得できるから、そこからいろんな情報を引き出せるの」
凛「simpleNameっていうのがクラスの名前のプロパティかにゃ?」
ことり「うん。他にも、コンストラクタとか、クラスのメンバのコレクションとかにもアクセスできるよ」

ことり「次は関数の参照。といっても、これはラムダ式のところでもう出てきてます」

凛「なんとなく見覚えあるにゃ」
ことり「高階関数の話で使ったサンプルコードの再掲です。::kotoriとかで KFunction のインスタンスが取れるよ」

ことり「次はプロパティ」

ことり「SchoolIdol::ageみたいにクラス名の後にプロパティ名を指定すると、 KProperty のインスタンスが取れます」
凛「このage.getのところって・・・」
ことり「SchoolIdolのインスタンスを渡すと、ageプロパティの値を返してくれます。このKPropertyは特定のSchoolIdolのインスタンスと結びついてるわけじゃないから」
凛「わかるけど、なんか不思議な感じがしたにゃ」
ことり「メタプログラミングって概念的だからね・・・」

ことり「最後にコンストラクタ。これは簡単で、::SchoolIdolだけでOKです」
凛「これは何のインスタンスが返ってくるの?」
ことり「コンストラクタも関数だから、KFunctionだよ」


ことり「それでね凛ちゃん、実はみもりんの武道館ライブも申し込んでるんだ」
凛「はいはいことうみことうみ」
ことり「当たるといいなぁ・・・」


LINEで送る
Pocket


コメントを残す

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