目次
if文とは
if文は様々なプログラミング言語で使用され、「Aという条件を満たす時にBを行う」という処理を記述できます。特定の数値の時だけパラメータを切り替えるなどに使えます。
Maxでもif文の処理ができるオブジェクトがあり
if(条件式)then(真の場合)else(偽の場合)
の形式で使用できます。
条件式に当てはまる場合は[真の場合]を出力し、当てはまらない場合は[偽の場合]を出力します。elseは省略可能で、偽の場合何も出力されなくなります。
基本の使い方
例えば以下のように作ると、入力された数値が10を超えた時にbangが出力されます。
$i1は「第1インレットを整数で受ける」を意味します。この条件文は[if $i1 > 10]で「第1インレットからの数値が10を超えた場合」となります。[then bang]で「真の場合はbangを出力する」という意味になります。
このようにthenを1に変更、else 0を追加することで、条件式が真の場合1を出力し、偽の場合0を出力します。出力先にはトグル・オブジェクトがあり、入力された数値によってオン・オフが切り替えられます。
複数の条件を使う
条件を複数設定することで、特定の範囲の数値を取り出すなどができます。
and演算子
&&を使用することで「これらの条件式を満たす場合」という条件を作れます。
この場合は3を越えて、7を越えない数値が入力された場合(つまり4~6)に1が出力されます。
or演算子
||を使用することで「どちらかの条件式を満たす場合」という条件を作れます。
この場合3を越えない数値か7を超える数値の場合1が出力されます。つまり入力される数値が~2か8~の場合が真となります。
出力先を指定する
out 2などを設定することで、アウトレットを増やし、出力先を指定できます。
この場合~4ならば第1アウト、それ以外は第2アウトに、入力された数値をそのま出力するようになっています。
[then $i1]と記述することで、真の場合に入力された数値をそのまま出力します。
[else out2 $i1]は、out2で第2アウトを出力先に指定して、偽の場合入力された数値をそのまま出力するようにしています。
複数の入力を使用する
$i1, $i2のように指定することでifオブジェクトにインレットを追加できます。
この場合、第1インが第2インより小さい場合に1を、それ以外の場合0を出力します。
Maxの仕様で、第2インに数値を入力されても、アウトから出力されません。第2インの数値を変更してから第1インの数値を変更する必要があります。
第2インの数値を変更してアウトから出力させるには以下のような処理を挟みます。
左の例ではpakオブジェクトを挟んでいます。pakオブジェクトは第2インレットに入力があっても出力が行われます。
この場合は[3 5]というリストメッセージで出力されます。ifオブジェクトでリストメッセージを受けた場合、受けたインから次のインにメッセージが割り振られ、第1に3、第2に5が送られます。
右の例ではtriggerオブジェクト(省略してt)を使用しています。Maxオブジェクトのアウトは右から順に出力される仕様を乗っ取り、この場合tの第2アウトから5がifの第2インに、tの第1アウトからbangがifの第1インに送られます。
ifは第1インの情報を保持しているので、bangが来た時に、以前に入力された数値で出力されます。
入力の指定
これまで$i1のような形で整数で例を出してきましたが、以下のように浮動小数点、文字も扱うことができます。
- $i1 整数(int)
- $f1 浮動小数点 (float)
最後の数字はインレットの位置を表します。
テーブルの使用
if文ではテーブルの数値を参照することもできます。
$s1[0] 文字(symbol)
$s1の次に[0]と記述し、これはインデックスの数値になります。tableやitableの参照したいXの値が[]に入ります。
このシンボル・メッセージは第1インレットにしか入力できません。
[symbol テーブル名]の形でifオブジェクトにメッセージを送ります。この例では指定されたテーブルの0番目にあるデータを参照します。データが1であれば1を出力し、そうでなければ0を出力します。
条件式の種類
ifオブジェクトで使用できる条件式を紹介します。
以下同様にA < Bの形式で使用します。この例では「BがAを超える」という意味になります。
< | を超える |
<= | 以上 |
> | を越えない |
>= | 以下 |
== | 同じ |
!= | 同じではない |