JavaFXをマスターしよう:より深いJavaFXの世界へ

沖林正紀
2007-08-06 12:33:01
  • このエントリーをはてなブックマークに追加

bindによるプロパティの設定

 トリガーより簡潔にプロパティの自動設定を記述する方法がある。それがbind演算子だ。たとえば、リスト4-2と同様のふるまいをbindでさせるには、リスト4-4のようにクラス定義とは別のブロックで記述する。bindによる処理は増分評価(incremental evaluation)といい、トリガーとしくみは異なるものの、結果は同じになる。

リスト4-4 bindによるプロパティの設定(1)

// クラス定義とは別のブロック
attribute Schedule.end = bind  new Date( start.getTime() + 3600 * 1000 );

 また、プレゼンの前に打ち合わせをする場合があるが、その時の打ち合わせはプレゼンの開始までには終了しなくてはならない。そんなときにもbindは利用できる。それをリスト4-5に示す。プレゼンの日程が前にずれてしまうと打ち合わせの時間がほとんど取れないといった関連性も、これで表現できる。bind lazyで遅延評価させることもできる。

リスト4-5 bindによるプロパティの設定(2)

// インスタンス生成時にbindを組込み
var s1 = Schedule {
  business : 'プレゼン'
  place    : '大会議室'
  start    : sdf.parse( '2007/07/10 14:00' )
  end      : sdf.parse( '2007/07/10 16:00' )
};
var s2 = Schedule {
  business : 'プレゼン打ち合わせ'
  place    : '小会議室'
  start    : sdf.parse( '2007/07/10 13:00' )
  end      : bind s1.start   ← プレゼン開始までに終了
};

s1.start = sdf.parse( '2007/07/10 13:30' );  ← スケジュール変更!
println( "{s2.end format as <>}" );  ← '2007/07/10 13:30'

配列の操作

 JavaFXでは、配列の操作をSQLに似た構文で行うことができる。具体的には、insert, delete, select, whereを記述できる。

 リスト4-6はinsertの例だ。この例では、要素が配列の最後に追加される。追加する要素の次にas firstを指定すれば配列の最初に追加される。また、intoの代わりにafter, beforeによって追加する位置を指定することもできる(insertの記述例を参照)。deleteの場合はそういったものが存在しない(deleteの記述例を参照)。

 記述例でa[ . == 'w' ]というのは、値が'w'であるaの要素を表す。Javaならforやifを組み合わせるべきところを簡潔に表せるのはスクリプト言語ならではだ。同じ値を持つ要素が複数ある場合は、insertがそれぞれの要素で適用される。

リスト4-6 insertで配列に要素を設定

var a : Number* = [];  ← aは複数個の数値を要素に持つことができる配列
for( i in [1..9] )  {
  insert i * 2 into a; ← aに要素を追加する
}
println( "{a format as <<%3d>>}" ); ← '  2  4  6  8 10 12 14 16 18'

// insertの記述例
var a = ['x','y','z'];
insert ['v','w'] as first into a;  ← ['v','w','x','y','z']
insert 's' after a[ . == 'w' ];    ← ['v','w','s','x','y','z']
insert 't' before a[4];            ← ['v','w','s','x','t','y','z']
var b = a[ indexof . < 4 ];        ← ['v','w','s','x']

// deleteの記述例
var a = ['x','y','z'];
delete a[1];           ← ['x','z']
delete a[ . == 'z' ];  ← ['x']
delete a;              ← []
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]