ついにベールを脱いだJavaFX

第14回 補遺:JavaFX Scriptマイグレーションガイド

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

JavaFX Scriptはインタープリタ版,Preview SDK,JavaFX 1.0,Java FX 1.1と変遷を遂げてきました。そして,そのつど文法やAPIが変更されてきました。

そこで,本連載の補遺として,その主な変更点をまとめてみます。主に文法の差異をまとめ,APIに関しては大きな変化のみを取りあげています。

ここで,いつ変更されたかわるように,以下のように記号を使用します。

  • (I) ... インタープリタ版
  • (P) ... Preview SDK
  • (1.0) ... JavaFX 1.0
  • (1.1) ... JavaFX 1.1

たとえば,タイトルに (I)/(P)と記述してあれば,インタープリタ版とPreview SDKが最新のJavaFX 1.1とは異なることを示しています。また,リストのタイトルに(I)と記述してあれば,インタープリタ版での記述法を示しています。

目次

文法編

データ型と変数

数値型の変更 (I)/(P)/(1.0)

インタープリタ版では数値型はInteger,Numberで表されていました。IntegerはJavaのint,long,BigIntegerクラスに対応し,Numberはdoubleに対応していました。

JavaFX 1.0でIntegerはintに対応するように変更されました。また,JavaFX 1.1でNumberがfloatに対応するように変更されました。

さらに,JavaFX 1.1ではInteger,Number以外に以下の数値型が提供されています。

  • Byte
  • Short
  • Long
  • Float
  • Double

それぞれ,Javaのbyte,short,long,float,doubleに対応しています。

時間間隔 (I)

時間間隔を表すDuration型が導入され,時間間隔を表すことができます。

リスト1 時間間隔 (P)/(1.0)/(1.1)

var u: Duration = 2h; // 2時間
var v: Duration = 30m; // 30分
var x: Duration = 1.0s; // 1秒
var y: Duration = 10ms; // 10ミリ秒

複数の要素からなる変数 (I)

インタープリタ版では変数が複数の要素を持つかどうかを示すために?,+,*を使用して変数を定義することができました。Preview SDKからはこれらのキーワードはサポートされなくなり,複数の要素で表される場合はすべてシーケンスとして定義します。

リスト2 複数の要素からなる変数 (I)

var x? = [0..10]; // nullの可能性がある
var y+ = 5; // 変数の個数が1個以上
var z* = [2..5];  // 変数の個数が0個以上

リスト3 複数の要素からなる変数 (P)/(1.0)/(1.1)

var x: Integer[] = [0..10];
var y: Integer[] = 5;
var z: Integer[] = [2..5];

定数 (I)/(P)

JavaFX 1.0で一度だけ代入することができるdefが定義されました。

リスト4 defキーワード (1.0)/(1.1)

def x = 10;
x = 20; // NG 代入はできない
 
def line = Line {
    startX: 0.0 startY: 0.0
    endX: 10.0 endY: 20.0
};
line.startX = 2.0; // これはOK

定数の代入 (I)

インタープリタ版では定数の型の記述を省略できましたが,Preview SDKからは型を明示する必要があります。

リスト5 定数の代入 (I)

Rect {
    width: 200
    height: 1000
    fill: red
};

リスト6 定数の代入 (P)/(1.0)/(1.1)

Rectangle {
    width: 200
    height: 1000
    fill: Color.RED
};

複数行に渡る文字列 (I)

インタープリタ版では複数行に渡るリテラル文字列が許されていましたが,Preview SDKから使用できなくなりました。複数行に渡る文字列を扱う場合,文字列中に改行を示す\nを含めます。

リスト7 複数行の文字列 (I)

var text = "This
is
a multiline
string.";

リスト8 複数行の文字列 (P)/(1.0)/(1.1)

var text = "This\nis\na multiline\nstring.";

文字列への式の埋め込み (I)

インタープリタ版ではダブルクオテーションで囲まれた文字列のみ式の埋め込みが可能でした。Preview SDKからはダブルクオテーションだけでなく,シングルクオテーションでも式の埋め込みが可能です。

リスト9 式の埋め込み (I)

var x = 10;
System.out.println("x = {x}");   // これはOK
System.out.println('x = {x}');   // これはNG 実行すると x = {x} と出力される

リスト10 式の埋め込み (P)/(1.0)/(1.1)

var x = 10;
println("x = {x}");   // これはOK
println('x = {x}');   // これもOK

フォーマット (I)

インタープリタ版ではオブジェクトを文字列に変換する場合,式の後ろにformat asで指定しました。JavaFX 1.0からは式の前に直接フォーマットを指定します。

リスト11 フォーマット (I)

var x = 10;
System.out.println("x = {x format as <<%05d>>}"); 

リスト12 フォーマット (P)/(1.0)/(1.1)

var x = 10;
println("x = {%05d x}");

著者プロフィール

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

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

コメント

コメントの記入