センダーとレシーバー

(2015/12/19 追記) この説明は、オフラインエディターのv441.2で確認しました。今日現在のオンライン版であるv441ではまだ使えないようです。ご注意ください。

        • -

※ これはScratch Advent Calendar 2015の12/16の記事です。

「いいよね、センダー」
「いいね、レシーバー」

Smalltalkerは、implicit communicationで通じ合っているので、お互いの会話は少ないものですが、たまに話をするとすればこんな感じです。
さて、今日はScratchの話。
Scratchのメッセージは便利なものです(Smalltalkのメッセージとは似て非なるものであることはこのあたり)。
2.0でカスタムブロック定義ができるようになったとは言え、不特定多数のスプライトやステージの任意のスクリプトを起動するイベントを同時に送る方法はこれしかありません。
ブロードキャスト(放送)とはよく言ったものです。
非同期の「[メッセージ]を送る」と、同期する「[メッセージ]を送って待つ」があるのもナイスです。
Meshを使えば、ローカルだけでなく、分散環境でも使えます。
いまScratch界でモテるのは、メッセージを使いこなせる人ではないでしょうか。

そんな素晴らしいメッセージですが、ひとつだけ困ったことがありました。
それは、デバッグが超しにくいことです。
一度書いたら最後、誰が定義していて、誰が反応するのか動かしてみるまで誰にも分からないという恐怖のブラックボックス
これがテキスト言語なら、grepとかすれば良いのでしょうが、ビジュアル言語のScratchではそうも行きません(正直に言うと、1.4のころは「プロジェクトのまとめを書きだす」して、そのテキストをgrepしてました)。冒頭の会話は、Smalltalkに備わっている検索機構が如何に素晴らしいかをたたえあっているものです(この文脈であればセンダーでなく、インプリメンターですが、そこは演出上の改変)。

そんなことも今では昔話。
なぜなら、メッセージを送受信するブロックの右ボタンメニューにセンダーとレシーバーの検索機能が追加されたからです。
たとえば、これは「[message1]を受け取ったとき」の場合です。

このメニューから「センダーを表示」を選ぶと、このメッセージを送っているスクリプトを含むスプライト(もしくはステージ)のサムネイルがハイライトされます。黄色い枠が分かるでしょうか。

さすがに、該当するスクリプトまでは教えてくれませんが、通常はこれだけで十分でしょう。
同様に「レシーバーを表示」はメッセージを受け取っているスクリプトを含むスプライト(もしくはステージ)のサムネイルがハイライトされます。
「センダーとレシーバーのハイライトを消す」は、その言葉通りです。
そして、「rename broadcast」でメッセージ名のリネームが可能です。その際、全てのセンダーとレシーバーも自動的に置き換わります。Just like a dream!
ちなみに、なんでこれが英語のままなのかというと、決して私がさぼっているからではなく、翻訳のためのエントリーがまだ用意されていないからです。しかし、この機能自体、自分で訳していたのにすっかり存在を忘れていたのはここだけの話。

これに限らず、Scratchには多くの隠し機能があります。いろいろなところで、マウスの右ボタンやシフトキーを押しながらのクリックを試してみると、面白いものが見つかるかもしれません。
それでは、皆さん、これからもハッピーなScratchライフをお楽しみください。

P.S. ちなみにタイトルは新井素子の「チグリスとユーフラテス」へのオマージュです。