普段はPHPerになってしまった私がSuperColliderのクラスを書こうとした時に詰まったポイントのメモ。基本、ドキュメントを読まずにObjectクラスのソースを読んでお作法を知ろうと思ったのだけど、意外とハードル高かった。
準備
拡張子は.scで、下記のディレクトリーに置いて、メニューの [ Language > Recompile Class Library ] を選択。
/Libraries/Application Support/SuperCollider/Extensions/
コンパイルに失敗したらエラーが表示されるので、ひたすらエラーを潰す。
継承
スーパークラスの指定はコロンでOK
MyClass : SomeSuperclass { }
スーパークラスを指定しないと、暗黙的にObjectクラスを継承したことになる
メソッド名にアスタリスク( * )が付くものがある
アスタリスクが付くものはクラスメソッドで、thisがクラスを指す。アスタリスクがつかないものはインスタンスメソッドで、thisがインスタンスを指す。分かりにくいぜ
メソッド内にキャレット( ^ )があるけど何だこれ
returnでした。分かりにくいぜ
returnしない場合は、インスタンスが返されるので、書かなくても動く。
変数の前の大なり小なり( <, > )は何だ
< がゲッター、> がセッターでした。分かりにくいぜ
MyClass : Superclass { var myVariable; variable { ^myVariable } variable_ { arg newValue; myVariable = newValue; } }
本来このようにゲッターとセッターを書かないといけないところを、、、
MyClass { var <getMe, >setMe, <>getMeOrSetMe; }
短く書けるよ!ということらしい。
ちなみに変数も var と classvar があり、前者はインスタンス変数、後者はクラス変数。クラス変数は他の言語だと定数と似た扱いなのかな?
このあたりの解説はヘルプの Guides/Writinglasses に書いてあって、詳しくはデザインパターンでググれって書いてあるので、デザインパターンについて勉強しないといかんっぽい。仕事でも必要になるし、勉強するか〜