チュートリアル 7:
「右から左へ」の順序

メッセージ・オーダー

このレッスンでは、 Max でのメッセージが常に右から左への順序( right-to-left order )で送信されること、そして、メッセージが他のオブジェクトをトリガした場合、そのオブジェクトが、他で何かが起きるより前に、まっさきにメッセージを送信することを実例で示します。これら2つの原則を知ることは、パッチャー・プログラムの動作を理解する手助けとなります。

実例で説明しましょう。

・ A と表示された button をクリックして下さい。 bang メッセージは最初に数値 60 を持つメッセージボックスに送信され、そのメッセージが print オブジェクトに送信されて、 Max ウィンドウ にA:60が出力されます。 その後 bang メッセージは数値 50 を持つメッセージボックスに送信され、そのメッセージが print オブジェクトに送信されて、Max ウィンドウにA:50が出力されます。 最後に bang は数値 40 を持つメッセージボックスに送信され、そのメッセージが print オブジェクトに送信されて、Max ウィンドウにA:40 が出力されます。

この例は button のアウトレットから他のオブジェクトまで右から左へという順序で bang が送信されることを示しています。またメッセージのオーダーが、これ以上トリガするオブジェクトがなくなるまで(この場合 print オブジェクトが動作するまで)下へと降りていくことも示しています。その後 button から出ている次のパッチコードに戻り、次の bang が送信されます。

bangbang

bangbang オブジェクトは何らかのメッセージを受信すると bang を各アウトレットに送信します。 アウトレットの数は書き込まれたアーギュメントによって指定されます。 メッセージがアウトレットから送信される順序は、ここでも「右から左へ」になっていて、最初に1番右のアウトレット、最後に1番左のアウトレットです。

・ B と表示された button をクリックして下さい。オブジェクトが(bangbang のように)複数のアウトレットを持っている場合、メッセージが右から左への順序で送信されるのがわかるでしょう。

例 A と C のように、1つのアウトレットに多数のパッチコードが接続されている場合、メッセージは受信側のオブジェクトの位置によって右から左への順序で送信されます。しかし例 B、D、E のように1つのオブジェクトが複数のアウトレットを持つ場合、メッセージは行き先に関わらず右から左へ順序でアウトレットから送信されます。

trigger

trigger オブジェクトは bangbang によく似ていますが、 bang メッセージと同様に数値も扱います。trigger オブジェクトが持つアウトレットの数は、1つのアーギュメントでその数を指定するのではなく、書き込まれたアーギュメントの個数によって決まります。trigger の各アーギュメントはアウトレットが出力する型を指定します: int に対しては、float に対しては bang に対しては b、リストに対しては l を使います(リストはサンプルパッチでは使われていません)。

・ C と表示されたメッセージボックス 90 をクリックして下さい。print オブジェクトはその位置に従って右から左の順序で数値を受信します。

・ D と表示されたメッセージボックス 90 をクリックして下さい。trigger の各アウトレットは int を送信するように割り当てられているため、数値90は右から左の順序で各アウトレットから送信されます。

・ E と表示されたメッセージボックス 90 をクリックして下さい。 この例では、各アウトレットは異なるものを送信するように割り当てられています。 右アウトレットは int 、中央のアウトレットは float 、そして左アウトレットは bang を送信します。

注: bangbangtriggerの中で使用される名前は(例Eで示されているように)b や t などに短縮することができます。Max は、この形でもこれらのオブジェクト名を理解することができます。

まとめ

複数のアウトレットを持つオブジェクトは、右から左の順序でメッセージをアウトレットから送信します。 1つのアウトレットに複数のパッチコードが接続されている場合、受信側のオブジェクトの位置に従って、メッセージは右から左の順序で送信されます(受信オブジェクトが垂直方向に完全に一列に並んでいる場合、順序は下から上になります)。 bangbang オブジェクトはメッセージを受信すると、 bang を各アウトレットから送信します。 trigger は数値、リスト、 bang を受信すると、送信前にメッセージを各アウトレットに割り当てられた型に変換します。

参照

bangbang bang を順番に多くの場所へ送信します。
buddy 受け取った数値を同期させ、それらを同時に出力します。
fswap 2つの連続した小数の順序を逆にします。
swap 2つの連続した数値の順序を逆にします。
trigger 数値を順番に多くの場所へ送信します。