Part19:プロトコル

続・おまけ

海未「破廉恥です!破廉恥です!!破廉恥です!!!」
希(予想以上のすごい剣幕や)
海未「何なのですかあれは!?女の子同士、それも小学生が、あ、あんなこと・・・」
凛(うんうん、顔真っ赤にして取り乱す海未ちゃん、やっぱりかわいいにゃ)
海未「百合にとどまらず、BLとか・・・美々の名台詞に共感しそうになってしまったではないですか・・・」
希(あ、なんだかんだで3期まで見とるな)
海未「東條希!」
希「は、はいっ!?」
海未「分かっていて勧めましたね?そこへ直りなさい!成敗します!」
希「・・・くっ、殺せ!」
海未「いいえ、殺すなんてもったいない」
希「いやああああああああああああああああああああっ!!」


本編?ここから

希「・・・う、海未ちゃんにワシワシMAXされるとは・・・不覚」
凛「希ちゃん、希ちゃん、しっかりするにゃ!」
海未「私がやったことですが・・・今回、希は無理そうですね」
凛「そんなこともあろうかと、凛も予習してきたにゃ!」
海未「!凛、気が利くではないですか」
凛「あとは凛に任せて、希上等兵はゆっくり休むにゃ!」
希「あ、あとは頼んだで、凛二等兵・・・がくっ」
凛「というわけで海未軍曹!今日は凛二等兵が担当するであります!」


今度こそ本編ここから

凛「ではプロトコルの説明を始めるにゃ」
海未「はい。よろしくお願いします」
凛「これまで出てきたリストとマップ、両方ともEnumモジュールの関数が使えたのは覚えてるかにゃ?」
海未「mapやreduceなどはどちらにも使えました」
凛「うん。それはね、リストもマップもEnumerableというプロトコルを実装しているからなんだ」
海未「前にEnumerableとStreamのところで出てきた話ですが、Enumerableなデータ構造というのはEnumerableプロトコルを実装したデータ構造と考えればいいのですね」
凛「多態性とかポリモルフィズムとかそういうのをEliixrで表現するための仕組み、なんだって」
海未「ちょっと、よくわかりません・・・」
凛「たとえば自転車にゃ。ハンドルとブレーキとペダルがついていれば、あとはどんな代物であろうと自転車として運転できるにゃ」
海未「そのハンドルとブレーキとペダルがプロトコルだということですか?」
凛「そんな感じにゃ。Enumerableプロトコルで決められた関数を実装した構造体は、中身が何であれEnumモジュールの関数で扱えるにゃ」
海未「自作の構造体でも、Enumerableを実装すればよいのですか?」
凛「そうにゃ。ちょっと例に出すにはめんどくさいから、代わりにプロトコルを自分で作って、構造体に実装してみるにゃ」

凛「長くなったので上から順に解説するよ。まず、defmoduleで構造体を3つ定義してるにゃ。これにプロトコルを実装していくにゃ」
海未「ここまでは、変わったところはありませんね」

凛「次のdefprotocolがプロトコルの定義にゃ。Idolってプロトコルで、これを実装した構造体はそれっぽい自己紹介ができることにするよ」
海未「def introduce idolというのは、do~endブロックのない関数定義ですか?」
凛「うん。関数の名前と引数だけ決めて、中身はそれぞれの構造体の側で決めるにゃ」
海未「プロトコル自体が実装を持つわけではないのですね」

凛「次のdefimplで、構造体にプロトコルを実装するにゃ。ここではSchoolIdolとProfessionalIdolの2つの構造体に実装して、StreetSingerには実装しないことにするにゃ」
海未「ここで定義しているのが関数の本体ですね」
凛「うん。SchoolIdolとProfessionalIdolで実装が違うのがポイントにゃ」

凛「最後は、ここまで用意した構造体とプロトコルを使ってみるにゃ」
海未「requireというのは初めて見ましたが」
凛「モジュールの中で、他のモジュールを使う場合にrequire モジュール名って書くにゃ」
海未「プロトコルは書かなくてよいのですか?」
凛「なんか大丈夫っぽいにゃ」

凛「実行結果はこうなるにゃ」

凛「全部同じIdol.introduce関数を使ってるんだけど、海未ちゃんとしまむーでは違う処理が動いてるにゃ」
海未「呼び出し方はプロトコルで決まっていて、実際の処理は構造体ごとに変わるのですね」
凛「そしてNYの都市伝説穂乃果ちゃんはIdolを実装してないからエラーになるにゃ」

海未「Enumerableの場合も、Enumerableプロトコルで定められた呼び出し方で、リストとマップで違う処理が実行されているわけですね」
凛「分かってくると面白いにゃ」

海未「次回は希に罪滅ぼしとして内包表記をやってもらいます」
希「なんか難しそうなところやん・・・」

凛「今回はおまけなしかな?」
海未「また関節を外されたいのですか?」
凛「・・・なんでもないにゃ」


LINEで送る
Pocket


返信を残す

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