Quartz Composerにどっぷり!
数値と文字列
今回のテーマ

今回のテーマは、数値と文字列です。

推奨環境 この解説は、以下の環境を前提に作成し、動作確認等を行っています。ご確認ください。

改版履歴

数値

今回のテーマは、数値と文字列。そう、地味ですね(^_^;。でも、全体に関わる話ですから知っていて損はないでしょう。まずは、数値からです。Quartz Composer では、数値の種類は、Index という整数値、Number という実数値、Boolean という論理値があります ( 厳密には論理値は数値じゃないかもしれませんが、数値へ変換したときに True = 1 で False = 0 となっているようです )。

文字列

続いて文字列です。

JavaScript

さて、数値も文字列もそれなりの処理用のパッチが用意されてることがわかりましたが、これで不足はないかと言われると、結構不足しているものもあります。例えば、文字列の一部を切り出すとかもありません。でも、Quartz Composer には、反則技とも言えるかもしれない JavaScript パッチというものが存在します。パッチの中に JavaScript のコードを書くことが出来ます。つまり、JavaScript に備わっている数値や文字列の機能を使うことが出来るのです。

Inspector > Settings にコードを書くことが出来ます。入出力の個数は、 Inputs と Outputs の横にあるボタンで増減できます。

入力情報の数を2にしたら、JavaScript パッチの入力ポートが2つになって、コードからは、inputs[ 0 ] と inputs[ 1 ] が参照できるようになります。出力情報を2にしたら、JavaScript パッチの出力ポートが2つになって、JavaScript から、outputs[ 0 ] と outputs[ 1 ] に値を代入すると出力ポートへ出力されます。JavaScriptの知識が必要になりますが、柔軟なものが作れるでしょう。

上図のコードは、文字列中の指定の場所の1文字を取り出すというものです。inputs[ 0 ] に文字列、inputs[ 1 ] に取り出す文字の場所を指定します。取り出した文字を、outputs[ 0 ] に出力しています。

JavaScript を使うと、Sturcture を作成することができます。Array オブジェクトを作って、それを outputs へ出力するだけです。

var cities = new Array();

cities[ 0 ] = "Tokyo";
cities[ 1 ] = "Osaka";
cities[ 2 ] = "Nagoya";

outputs[ 0 ] = cities;

以下のようにして辞書な Structure も作成できます。

var city = new Array();

city[ "name" ] = "Tokyo";
city[ "population" ] = "100";

outputs[ 0 ] = city;
データタイプについて

地味ついでに Quartz Composer で出てくるデータタイプについて話をします。以下のデータタイプがあります。

プログラマーの方ならば、見覚えがあるものが多いかと思いますが、Structure と Virtual 辺りが見慣れない感じでしょうか。Structure は、配列と辞書を統合化したようなものです。配列というのは、インデックス値つまり数値をキーとして内部要素にアクセスするもの。辞書というのは、( 一般に ) 文字列をキーとして内部要素にアクセするものです。キーとしての数値を文字列として扱うようにすれば、配列も辞書の一種と考えられます。Quartz Composer は、そういう形で配列と辞書を統合化したものです。Sturcture の中に Sturcture を持つこともできます。

Virtual は、あらゆるデータを扱うことが出来るデータタイプ。Objective-C ならば id、C 言語なら void* のようなものです。

各パッチの各ポートには、データタイプが決められていて、マウスをかざすと表示されます。基本的には、ポートを別のポートに繋ぐ時は同じデータタイプであることが求められますが、異なる場合でも変換可能なものについては、自動的に変換が行われます。例えば、数値の出力ポートから文字列の入力ポートに接続した場合、数値は文字列に変換されて文字列のポートに入力されます。