JavaFXその後

その後もちょぼちょぼいじっているのだけど,結構落とし穴が..

多次元配列(というか配列の配列)が作れない

なんでだか知らないが作れない.普通に実装するとできてしまいそうなものだが,作れないようなのだ.

var a: Integer [][];

と宣言しようとしてもエラーがでる.

そもそも配列のリテラルがかなり強烈で,

[ [1, 2], [3, 4] ]

のような,他の言語だったら配列の配列宣言のように見えるものを書くと

[ 1, 2, 3, 4 ] 

に展開されてしまうという... これって便利か?

回避策

配列をクラスでラップしてやれば,その配列は作れる.

class IntArray {
    attribute content: Integer [];
}

var x = [IntArray{content: [1, 2]}, IntArray{content: [3,4]}];
System.out.println(x[0].content[0]);

うーん,めんどい.

バインドは1回だけ

JavaFXの強烈な機能「bind」は一つの変数に対して生成時に一回だけしか使えない.

let a = bind b;
...  なんかの処理
let a = bind c;
...

みたいなことは書けない.じゃあ,条件に応じてbindする変数を変化させたいような場合にはどうするかというと,if 文を書くことができる.

var b = 10;
var c = 20;
var x = true;
let a = bind if (x) b else c;

System.out.println(a);
x = false;
System.out.println(a);

こうすると,

10
20

となる.

さらに関数にバインドすることもできるので,実際には困ることはないのかもしれない.