メモ

以下詰った所のメモ

FXShell.mainの引数

[0]はクラス名、[1]が"--"で、[2]以降がScript内でARGUMENTSに格納されるようだ。
参照するときは(ARGUMENTS: String)[0]と書くとエディタが警告を出さない。

SVG

今のところ、Closedなnet.java.javafx.svg.translator.main.SVGBuilderを使っているデモのソースコードしか取っ掛かりがない。ソースコードレベルの変換が主で、直接Nodeオブジェクトを貰える訳ではなさそうだ。
しかもこれ、スタイルシートの扱いが怪しい。Inkscapeとかから持ってくるときはスタイルシートをインラインに展開するようなユーティリティが必要かも。

javafx.ui.canvas.Transform

translate:Translate = function(x:Number, y:Number) {
   return Translate {x: bind x, y: bind y};
};


translateX:Translate = operation(x:Number) {
   return Translate {x: x, y: 0};
};

translateY:Translate = function(y:Number) {
   return Translate {x: 0, y: bind y};
};

operationだったりfunctionだったり、bindしてたりしてなかったり、どうなってんだろか。

functionとprintln

メソッドを定義する際、「副作用が無さそうだ」と思ったらoperationではなくfunctionを使うようにしてみている。手続き型言語から副作用を抜き取っている形だからなのか妙な感じではあるものの、関数型プログラミングスタイルの雰囲気がなんとなく見えてきた。関数型言語の説明にエクセルが引き合いに出される意味がわかった気がする。
ただ、いざというときのパラメータ確認にSystem.out.printlnが使えないので少し不便だった。
ふと、クラスのインスタンス化とプロパティ設定が可能ならtriggerがoperationの代わりになるんじゃないかと思って試した。

class SystemOut {
    attribute println: String;
}
trigger on SystemOut.println = string {
    System.out.println(string);
}
function out() {
    return SystemOut { println: "print" };
}
out(); // prints "print"

上手くいったのでさしあたっての悩みは解決した。ただこれってtriggerを介せばfunctionと言えどもいくらでも副作用が引き起こせるって事だよなぁ。行儀の悪いクラスは作るなって話なんだろうけど。