RubyでProcessingする場合の変数について

2016-07-01

またRubyでProcessingを書けるようになったらいいんじゃないかと、processing-ruby-modeをいじっていて、Processing3で動くように載せ替えた。でやっぱちょっと問題だと思うのは、Rubyで書く場合の変数アクセスだ。

ProcessingのコードはPAppletを継承したクラス内に書かれたこととして扱われる。Processing/Javaで書いた場合には変数アクセスはなんの修飾もせずにできる:

float x = 0;
void draw() {
++x;
...
}

これはJavaがメンバ変数へのアクセスにthisを省略できるから。それ対してRubyの場合には@をつける必要がある:

def setup
@x = 0
end

def draw
@x += 1
...
end

どうしてこう書かなきゃいけないのか?@ってなによ?という疑問が湧いて、裏側を説明しないといけなくなり、はてはスコープがどうのとかいう話も出す必要が出てでくるのでこれはあまりよくないと思う。

そこでsetupdrawというグローバルな関数を用意して、ブロックを渡すようにしたらどうだろうか:

x = 0
draw do
x += 1
...
end

このほうがとっつき的にはよさそうな気がする。まあこれはこれで、doを忘れてエラーが出るとかいうことにはなりそうだけど…。あとは地の文でグラフィクスの関数呼ばれたらどうするのとか。