[Processing][仕様]color型はcolorクラスではない
Processingの言語仕様としてすばらしいところの1つに、color型があります。color型は、そのcolorModeに応じて、RGB色空間、HSB色空間を表現することができます。colorModeに関係なくグレースケール色空間も表現することができます。
このcolor型ですが、colorクラスというのがあるんだと思っている人が多いと思います。私もその1人でした。
ところが、次のプログラムは動きません。
color c = null;
color型がクラスで実装されているのであれば、インスタンスにnullを代入することが可能なはずですが、ProcessingのIDEは次のようなエラーを返しました。
Semantic Error: The type of the right sub-expression, “null”, is not assignable to the variable, of type “int”.
(うえちょこ訳:右辺式の”null”はint型の変数に代入することができません。)
このエラーから推測できることは、Processingではcolor型のことをint型と思っているようです。実際にProcessingのcoreパッケージ内のPGraphics.javaやPApplet.javaのソースコードを見てみると、color関数(colorメソッド)は存在するのですが、color型、colorクラスのようなものは見当たりません。そして、color関数(colorメソッド)の返り値が全てint型です。やはりProcessingのcolor型はint型と等しいようです。
この現象を技術的な視点で見ると、int型(32ビット)の表現領域があれば、透明度を含めたフルカラーを表現することは可能です。よって、色を整数値で保持しておくことに関しては何の問題はありません。
しかしプログラミング言語的な視点から見ると、そもそもJavaには、C言語のtypedefに相当する型を再定義する命令が存在しないのに、なぜcolor型はint型と同等に扱われているのかが気になるところです。
結論から言ってしまえば、ProcessingのIDEがコンパイル時に”color”型を”int”に書き換えています。わかりやすく書くと、プログラム中に
color c= 0;
と書いた部分は、ProcessingのIDEがコンパイルするときには
int c = 0;
に置き換えられています。詳しく見てみたい人は、ProcessingのIDEからスケッチをエクスポートしてみてください。Java Applet一式が出力されますが、Applet用のソースコードを見てみると既に”color”型は”int”に置換されていることがわかると思います。
Processingは、デザイナーが簡単に習得できるように設計されている言語なので、Javaで在りながらJavaらしさを極力抑えられていると言えます。color型にはProcessingのデザイナーへの思いやりが込められているわけですね。プログラマにとっては面白い研究材料(=ネタ?)でもあります。
Processingって面白いですね。
2 comments