チュートリアル 8:
Max で演算を行う

算術演算子

Max には、基本的な算術演算子、さらにモジュロ演算子(2つの整数を割った後の剰余を与えます) があります。

これらのオブジェクトを演算子と呼んでいます。そして演算に使われる数値をオペランドと呼びます。各演算子オブジェクトは右インレットに(格納される)オペランドを期待し、左インレットにもう1つの(演算と出力をトリガする)オペランドを期待します。右オペランドの初期値はアーギュメントとしてボックス内に書き込むことができます。左上の例では、2つの方法を見ることができます。 しかし、注意して下さい。たとえアーギュメントとして初期値が表示されていても、異なる数値が右インレットで受信されるとすぐに、初期値のあった場所に格納されます。

オブジェクトをトリガする左インレット

オブジェクトのインレットに接続するだけでは、演算は何も実行されないという点に注意して下さい。 数値(あるいは bang )を左インレットに送信して計算をトリガしなければなりません。オブジェクトの大多数は、左インレットで受信した入力によってトリガされます。 その他のインレットで受信した入力は、通常、後で使用するために格納されます。

・上の例で、演算子の上にあるメッセージボックスをクリックして下さい。

左インレットで数値が受信される前に、右インレットで数値が受信されなければならない点に注意して下さい。 これは、左インレットで受信したメッセージが、1番新しく受信した数値との演算をトリガするためです。 アーギュメントとして数値を書き込んでいない場合(そして右インレットで数値が受信されていない場合) + , - , * オブジェクトでは 0が、 / , % オブジェクトでは 1が、デフォルトのアーギュメントになります。

int あるいは float の出力

/ オブジェクトが 25 ÷ 3の結果として 8 を出力することに気がつくと思います。 これは、出力が int であり、送信前に(小数点以下が)切り捨てられたためです。

すべての算術演算子は、小数点を持つ数値をアーギュメントとして書き込まれていない限り、演算の結果をint で送信します。小数点を持つアーギュメントが書き込まれている場合、結果は float に変換されます。

パッチャーウィンドウ の右下にある2つのプログラムは1つの型から他の型に変換する方法を実例で示しています。 最初のプログラムでは、受信した float の小数点以下の部分を切り捨て、12 ÷ 2という演算を行なって、結果 6 を出力します。 2番目のプログラムは、小数点を持つアーギュメントを書き込まれているため、 float として12.75 ÷ 2.5という演算を行ない、float 型として出力します。

演算子が常に浮動小数点演算を行うようにしたい場合には、オブジェクトに初期値として小数点を持つ数値のアーギュメントを与え、演算に使用する数値を、左右のインレットを通じて送って下さい。

左インレットの bang メッセージ

左下のプログラムは演算子のその他の機能を示しています。

・最初に、4と書かれた message をクリックして + オブジェクトの左インレットに数値 4 を送信して下さい。 オブジェクトは 4 + 5を計算し、結果として 9 を出力します。

・次に、右インレットに数値 10 を送信して下さい。 数値 5 は数値 10によって置き換えられますが、出力は行なわれません。左インレットだけが出力をトリガすることができます。

button オブジェクトをクリックして + オブジェクトに bang を送信して下さい。 何が起こるでしょうか? bang + に実行を命じます。この場合、演算は受信した1番新しい数値を使って行なわれます。

左インレットへのリスト

演算子は、左インレットで、2つのオペランドを、リストとして同時に受信することができます。演算子は、右インレットに2番目の数値、左インレットに最初の数値を受信した場合と全く同様に演算を行ないます。数値が格納され、演算が実行されて、結果が送信されます。

3 20と書かれたメッセージボックスをクリックして、左インレットにリストを送信した場合の効果を見て下さい

・その後、左インレットに数値 4 を送信して下さい。すると、数値 20 が右インレットで受信されたのと同じように格納されていたことがわかるでしょう。

このことは、複数のインレット持つオブジェクトに数値のリストを送信する場合、その数値が、通常、各インレット毎に1つずつ配られるということを示しています。後の章では、これに関する別の例を見ることができます。

まとめ

数学的な演算は + - * / % などの算術演算子オブジェクトによって行われます。 オペランドは2つのインレットに受信されますが、左インレットだけが出力をトリガできます。 左インレットへの bang あるいはリストによって出力をトリガすることもできます。 演算子は通常 int を出力し、float のアーギュメントを持つ場合は float を出力します。

Max のほとんどのオブジェクトは左インレットに入力を受信することでトリガされます。リストは左インレットで受信することができ、同時に複数のインレットに値を供給することができます。

算術演算子はどのようなアルゴリズムの計算にでも欠くことができないものです。 これらの使用例は後のプログラムで示されます。

参照

expr 数式を評価する。
チュートリアル38 exprif