ついにベールを脱いだJavaFX

第1回 JavaFXの概要と基本

この記事を読むのに必要な時間:およそ 7 分

また,複数の変数もしくはアトリビュートとバインドすることもできます。

リスト10

var x = 10;
var y = 5;
var z = bind x + y;
 
println("Z: {z}");
 
x = 20;
 
println("Z: {z}");
 
y = 10;
 
println("Z: {z}");

ここでは変数zを,xとyの和にバインドしています。この場合,xとyのどちらが更新されても,zが更新されます。

図5

Z: 15
Z: 25
Z: 30

関数の引数をバインドすることもできます。関数をバインドする場合,関数定義の前にboundキーワードを付加します。そして,変数の初期化時にbindを付加して関数をコールします。以下の例は引数のaとbを加えた数を返すメソッドです。

リスト11

bound function add(a: Integer, b: Integer): Integer {
    return a + b;
}
 
var x = 10;
var y = 5;
var z = bind add(x, y);
 
println("Z: {z}");
 
x = 20;
 
println("Z: {z}");
 
y = 10;
 
println("Z: {z}");

これを実行するとどうなるでしょう。

図6

Z: 15
Z: 25
Z: 30

関数を再度コールしているわけではありませんが,関数の引数に使用したxとyを更新すると,自動的にメソッドが評価され,zの値が更新します。

今までのバインドはすべて一方向でした。つまり,bindされた変数を更新することはできません。しかし,双方向のバインドを行いたい場合もあります。このような場合は双方向バインドを使用します。双方向バインドはbindと共にwith inverseキーワードで表します。

リスト12

var x = 10;
var y = bind x with inverse;
 
println("X: {x} Y: {y}");
 
x = 20;
 
println("X: {x} Y: {y}");
 
y = 30;
 
println("X: {x} Y: {y}");

なお,双方向バインドでは変数を用いた式などを記述することはできません。常に対応する2つの変数は同じものとして扱います。では,これを実行してみましょう。

図7

X: 10 Y: 10
X: 20 Y: 20
X: 30 Y: 30

xを変更しても,yを変更しても,両変数とも常に同じ値になっていることがわかります。

著者プロフィール

櫻庭祐一(さくらばゆういち)

横河電機に勤務するかたわらJava in the Boxにて新しい技術を追い続けています。JavaOneは今年で11年目。名実共にJavaOneフリークと化しています。