2008年6月30日月曜日

JavaFX台本型プログラミング言語基準(草案):第3章

3.属性と関数
3.1 属性
属性はオブジェクトの状態を定める。それらは、attribute鍵語に続けた、属性名、コロン(:)、セミコロン(;)で終結する属性型で宣言される。

attribute 属性名 : 属性型 ;

属性の既定値を宣言することができる(後で、オブジェクト直定数で与えられる値に定義しなおすことができる)。初期化子は、新たに生成されたオブジェクトのもとで、クラス宣言内で属性が指定された順に評価される。

import java.lang.System;

class X {
attribute a: Number = 10;
attribute b: Number = -1;
}

var x = X { };
System.out.println(x.a); // 10.0を表示する
System.out.println(x.b); // -1.0を表示する

明示的な初期化が行われないと、それぞれの属性は妥当な既定値に設定される。

import java.lang.System;

class DefaultValuesDemo {
attribute a: Number;
attribute b: Integer;
attribute c: Boolean;
attribute d: String;
}

var demo = DefaultValuesDemo {};
System.out.println("Default Value: " + demo.a);
System.out.println("Default Value: " + demo.b);
System.out.println("Default Value: " + demo.c);
System.out.println("Default Value: " + demo.d);

上記コードは、次の既定値を画面に表示する(注記:最後の行は、空文字列を表示する)。

Default Value: 0.0
Default Value: 0
Default Value: false
Default Value:

データ型は、第4章で取り上げられている。

3.2 関数
関数はオブジェクトの振る舞いを定める。関数は次の形式を取る。

関数名 (属性名 : 属性型, ...): 戻り型 本体

ここで、本体は任意の式でかまわない。
関数は第一級オブジェクトである(たとえば、変数に割り当てたり、引数としてほかの関数へ渡すことができる)。
第1章で、何も引数を取らず、何も値を返さないgrow関数を定義している簡単な例を示した。

...

function grow(): Void {
width++;
height++;
}

...

その例証では、利用者が特定の寸法を指定できるようにした形の、関数の多重定義版も与えた。

...

function grow(amount: Integer): Void {
width += amount;
height += amount;
}

...

関数は無名にもなりうる。無名関数は、GUI構成部品のaction属性に振る舞いを割り当てる際に、しばしば利用される。

import java.lang.System;
import javafx.gui.*;

Frame {
visible: true
content: FlowPanel {
content: Button {
text: "Click Me!"
action: function() {
System.out.println("Click!");
}
}
}
}

0 件のコメント: