memo/20250621
created 2025-06-21 modified 2025-06-21
■ プログラミングで、呼ぶ側、呼ばれる側、の関係を逆転する話
呼ぶ側と呼ばれる側を逆転する手法には、古典的なコールバック関数手法の他に、OOPのオブザーバーパターンもあります。
オブザーバーパターンを1対多に拡張してスター構造にしたものをコンダクターパターンと呼ぶ人も居た気がします。
(ここに図解を入れたらいいんだけどな)
◆ 語感
カタカナ語に慣れていないとパッと思い浮かばないかもしれません。プログラミングのイディオム理解には「語感」が重要です。語感というか、誰が何をしているか、という話の状況をイメージすること、ですかね。
オブザーバーは注目するひと、注視するひと。今どき風の例え話で説明すると「この動画がいいなと思ったらチャネル登録と、通知登録をお願いします」の通知登録です。発信者側には「リスト」があって、注目したいひとが、発信者側のリストに、自分を登録する。同じことを一部プログラミング言語ではリスナー(傾聴するひと)という言い方で表現しますね。同じです。リスナーとして、自分を登録する。
コンダクターは流れることを促進するひと。スター型の中央に采配役のひとがいて、はい、これはこっち、はい、それはこっち、と受け渡す。聖徳太子はたくさんの人の話を同時に聞けたとかなんとか、そんな話もありましたっけ。→wikipedia でしらべたら36人の話を同時に聞いた、という伝説もあったそうです。すげぇ(w)
◆ 動機
呼ぶ呼ばれるを逆転したい動機は様々ありますが、自分が現場で一番納得した動機は、チームが複数会社に別れ意思決定権も別れる編成で、基盤部を先にビルドしたい(ビルドの時系列を逆転したい)、でした。
呼ぶ呼ばれる関係やビルドの時系列を逆転する手段を持っている、と、納品の時系列を逆転できることにもつながります。自社チームが巨大な混乱プロジェクトの中でサッサと役目を果たし涼しく過ごす、なども有りえます。
◆ 似てるけど違う何か
コールバック、というと、中には、Node.jsで使いこなしているよ、と思う方もおられるでしょう。それはそれで素晴らしい。ただ私の視点では、Node.jsなどのコールバックを多用するソースコード記述法は、先述とはまた別です。コールバックでもあるけど、プログラム言語イディオムの分類や、ソフトウェアエンジニアリング上の効能としては、ラムダ関数(無名関数)のそれに近いように思います。ソースコード上では一息に書いてあるけど、実行するときの流れ、制御フローが別になる、というテクですね。これはこれで語りがいがある話。
◆ このエントリーって何さ
私は、ソースコードの構造学みたいな知見を語りたいし、それが発展するさまを見たいんです。
【* 日々のメモ】
呼ぶ側と呼ばれる側を逆転する手法には、古典的なコールバック関数手法の他に、OOPのオブザーバーパターンもあります。
オブザーバーパターンを1対多に拡張してスター構造にしたものをコンダクターパターンと呼ぶ人も居た気がします。
(ここに図解を入れたらいいんだけどな)
◆ 語感
カタカナ語に慣れていないとパッと思い浮かばないかもしれません。プログラミングのイディオム理解には「語感」が重要です。語感というか、誰が何をしているか、という話の状況をイメージすること、ですかね。
オブザーバーは注目するひと、注視するひと。今どき風の例え話で説明すると「この動画がいいなと思ったらチャネル登録と、通知登録をお願いします」の通知登録です。発信者側には「リスト」があって、注目したいひとが、発信者側のリストに、自分を登録する。同じことを一部プログラミング言語ではリスナー(傾聴するひと)という言い方で表現しますね。同じです。リスナーとして、自分を登録する。
コンダクターは流れることを促進するひと。スター型の中央に采配役のひとがいて、はい、これはこっち、はい、それはこっち、と受け渡す。聖徳太子はたくさんの人の話を同時に聞けたとかなんとか、そんな話もありましたっけ。→wikipedia でしらべたら36人の話を同時に聞いた、という伝説もあったそうです。すげぇ(w)
◆ 動機
呼ぶ呼ばれるを逆転したい動機は様々ありますが、自分が現場で一番納得した動機は、チームが複数会社に別れ意思決定権も別れる編成で、基盤部を先にビルドしたい(ビルドの時系列を逆転したい)、でした。
呼ぶ呼ばれる関係やビルドの時系列を逆転する手段を持っている、と、納品の時系列を逆転できることにもつながります。自社チームが巨大な混乱プロジェクトの中でサッサと役目を果たし涼しく過ごす、なども有りえます。
◆ 似てるけど違う何か
コールバック、というと、中には、Node.jsで使いこなしているよ、と思う方もおられるでしょう。それはそれで素晴らしい。ただ私の視点では、Node.jsなどのコールバックを多用するソースコード記述法は、先述とはまた別です。コールバックでもあるけど、プログラム言語イディオムの分類や、ソフトウェアエンジニアリング上の効能としては、ラムダ関数(無名関数)のそれに近いように思います。ソースコード上では一息に書いてあるけど、実行するときの流れ、制御フローが別になる、というテクですね。これはこれで語りがいがある話。
◆ このエントリーって何さ
私は、ソースコードの構造学みたいな知見を語りたいし、それが発展するさまを見たいんです。
【* 日々のメモ】