手続き的にアトリビュートを初期化したい

JavaFX Script ってオブジェクトの生成を宣言的に書くのですが、一行で書けないということもありますよね。

たとえば、Java である文字列を空白で区切って、はじめのトークンを代入するということを書くのであれば、次のようになります。

        String message = ...;

        String token;
        StringTokenizer tokenizer = new StringTokenizer(message);
        if (tokenizer.hasMoreTokens()) {
            token = tokenizer.nextToken();
        } else {
            token = "";
        }

この token が JavaFX のクラスのアトリビュートだったら...

Foo {
    token: ここにどうやって書けばいいか分からない.....
}

となってしまうわけです。だいたい、JavaFX のアプリケーションを書いているとロジックをどこに書けばいいか分からなくなってしまうんですよね。慣れればそんなことはないのですが...

さて、この場合、どうすればいいかというと、{ } でくくったブロックを使います。

{ } でくくったブロックは無名の関数のような働きをします。return は書けないのですが、一番最後の行に書いたオブジェクトが代入されます。

なので、上の例は JavaFX Script で書くとこんな感じになります。

var message:String = .....;

Foo {
    token: {
        var t:String;

        var tokenizer = new StringTokenizer(message);
        if (tokenizer.hasMoreTokens()) {
            t = tokenizer.nextToken();
        } else {
            t = "";
        }
        
        t;
    }
}

このブロックはアトリビュートの初期化だけでなく、普通の変数を代入する時などにも使えますよ。