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!");
}
}
}
}

2008年6月29日日曜日

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

2.クラスとオブジェクト
2.1 クラスを取り込む
import文は、Javaプログラミング言語と同様に機能する。その構文は、

import パッケージ名.クラス名;

または、

import パッケージ名.*;

である。
import文が存在する場合は、それ以外のすべての応用コードの前になければならない。JavaFX台本型プログラミング言語は、自身の組み込みライブラリクラスのための名前空間(パッケージjavafx.*)を定義しているが、標準的なJavaプログラミング言語のクラスを取り込むこともできる。

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

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

クラスに関する利用修飾子は、Javaプログラミング言語におけるのと同様に機能する。クラスは、public、protected、またはprivateとして宣言でき、それぞれ、どこからでも(public)、現行のパッケージ内または派生クラス内から(protected)、もしくは現行クラス内のみから(private)利用できる。
注記:JavaFX台本型プログラミング言語は、構築子を支援していない。構築子の作用をまねるためには、新たなオブジェクトを返す静的関数を定義し、代わりにその関数を呼び出すことである。

2.2 クラスを定義する
JavaFX台本型プログラミング言語は多重継承を支援しており、そうしたものとして、新たな用語と規定を定義している。
・単純クラスは、Javaプログラミング言語で書かれたクラスを直接的または間接的に拡張した任意のクラスである。
・複合クラスは、単純クラスには当てはまらないすべてのクラスである。
・既定では、JavaFX台本型プログラミング言語で書かれたクラスは複合クラスである。
・クラスは、単純クラス一つだけを拡張することができる。そうしたクラスは、単純クラスとなる。クラスはまた、任意の数の複合クラスまたはJavaプログラミング言語のインタフェースを拡張することもできる。
注記:現在のところ、単純クラスはJavaクラスに変換され、複合クラスはJavaクラスとJavaインタフェースに変換される。
クラスを指定するための構文は、class鍵語に続けたクラス名、任意としてのextends鍵語とカンマ(,)で区切った基底クラス名の一覧、左中括弧({)、それぞれセミコロン(;)で終結している属性と関数の
一覧、そして右中括弧(})からなる。
既定では、クラスは同じ原始ファイルの中(モジュール通用範囲としても知られている)でのみ利用できるが、publicと宣言することによりどこからでも利用することができる。JavaFX台本型プログラミング言語は構築子を支援していないことに留意すること。構築子の作用をまねるためには、新たなオブジェクトを返す静的関数を定義し、代わりにその関数を呼び出すことである。

2.3 オブジェクトを定義する
前の章で述べたように、クラス実体化の推奨方法はオブジェクト直定数を使うことである。この形式のオブジェクト割り当ては、クラス名とその後に続く中括弧でくくった属性初期化子の
一覧から構成される宣言的構文を用いる。それぞれの初期化子は、属性名に、コロン(:)と属性の値を定義する式を続けて構成する。
オブジェクトを生成する際にnew鍵語を使うこともできるが、それは、Javaプログラミング言語のクラスの実体化がオブジェクト直定数によっては不可能である場合のために取っておくべきである。

import java.io.File;

var tmpPath = "/home/users/docs/tmp.txt"
var myFile = new File("tmp.txt");

2008年6月27日金曜日

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

以前から、一括変換型に変わったJavaFX言語の全ぼうを知りたいと思っていたのですが、ちょうどいい文書「The JavaFX™ Script Programming Language Reference (Draft)」が、しばらく前に公開されました。
今回から何回かに分けて、その和訳を載せたいと思います。訳にはつたないところもありますが、ご容赦ください。また、コード例の部分では、字下げが抜けてしまっているため読みづらいと思いますが、あわせてご容赦ください。
今回は、目次と第1章です。
---------------------------------------------------------
JavaFX台本型プログラミング言語基準(草案)

目次
1.言語概要
2. クラスとオブジェクト
3.属性と関数
4.変数と基本データ型
5.式、文、および演算子
6.列
7.列内包
8.データ結合
9.引き金
A.鍵語と予約語

1.言語概要
この章では、JavaFX台本型プログラミング言語の概要について説明する。ここでは主な特徴の概要を述べ、特定の構成概念についての詳述は後の章で行う。この本は、Java™ Web Startソフトウェアとしてまたは従来型の机上応用プログラムとしてウェブ(Web)ページ内で実行される、表現力豊かなインタネット依頼者側応用プログラムや要素の、設計者および開発者を対象としたものである。読者がJavaScriptおよび/またはJava™プログラミング言語に精通していることを想定している。
JavaFX台本型プログラミング言語は、
・図式利用者インタフェース(GUI)構成部品の指定に宣言型構文を使用しており、開発者のプログラムコードをGUIの実際の配置にぴたりと対応させることを可能にしている。
・宣言型データ結合と増分評価を使用しており、個々の構成部品を容易に作成および構成することを可能にしている。(
データ結合により)応用プログラムのデータとGUIの構成部品は、自動的に同期がとられる。
・静的に型付けされており、Javaプログラミング言語において大規模プログラムの作成と保守を可能にしているコード構造、再利用および情報隠ぺいなど
の特性と同様のものをほとんどを持っている。
・Javaプログラミング言語によるソフトウェア開発のための基準実装IDE(統合開発環境)であるNetBeansIDEを含め、すべての主要IDEと連携する。
・どのような規模または複雑さのGUIも提供することができる。
・Swingの使用を容易にする。
以下の節では、JavaFX台本型プログラミング言語について駆け足で紹介する。しかるべき点についてはJavaプログラミング言語と比較および対比させながら、その核となる構文と機能についての一般的な導入を与える。そして、それぞれの主題は後の章で更に詳しく取り上げられる。

1.1 クラス
クラスの定義は、Javaプログラミング言語と多くの共通点を持っているが、相違点もある。たとえば、情報は、領域ではなく、属性に格納される。振る舞いは、操作ではなく、関数によってあらわにされる。次の例は、それぞれの基本構文を示す簡単な矩形クラスを定義している。

class Rectangle {
attribute width: Integer;
attribute height: Integer;

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

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

Javaプログラミング言語とは異なり、クラス定義では、既存のライブラリを単に利用する必要はない。更に、JavaFX台本型プログラミング言語は多重継承を支援しており、必要なら複数のクラスを継承することができる。
クラスは、第2章で詳しく取り上げられる。
属性と関数は、第3章で詳しく取り上げられる。

1.2 オブジェクト
オブジェクト直定数は、クラスの実体化のための簡単な構文を提供する。次のコードは、前述した矩形クラスの単一の実体を生成し、その幅と高さの属性を100に初期化する(newを必要としない点に留意すること)。

Rectangle {
width: 100
height 100
}

このオブジェクトへの参照を格納するには、var鍵語を使う。

var myRect = Rectangle {
width: 100
height 100
}

オブジェクトは、第2章で詳しく取り上げられる。
変数と基本データ型は、第4章で詳しく取り上げられる。

1.3 式、文、および演算子
他のプログラミング言語と同様に、JavaFX台本型プログラミング言語は、式、文、および演算子を支援する。
第5章は、JavaFX台本型プログラミング言語において利用可能な式、文、および演算子について論じる。

1.4 列
列は、オブジェクトの順序付けられた一覧を保持する。これは、Javaプログラミング言語の配列にほぼ類似している。両方とも複数の値を保持し、0から始まる索引により検索される。

var week = ["Monday","Tuesday","Wednesday","Thursday",
"Friday","Saturday","Sunday"];
var mon = week[0];
var wed = week[2];
var fri = week[4];

部分列も支援されている。

var week = ["Monday","Tuesday","Wednesday","Thursday",
"Friday","Saturday","Sunday"];
var weekdays = week[0..4]; // 第1部分列
var weekend = week[5..6]; // 第2部分列

第6章は列宣言の基本を取り上げており、第7章は列内包に焦点を当てている。

1.5 データ結合
データ結合は、複数オブジェクトの状態を同期させるための簡単な構文を提供する。2つのオブジェクトが互いに結合されると、1番目のオブジェクトが更新されたときはいつも2番目のオブジェクトの値が自動的に変更される。データ結合の一般的な利用法は、GUI部品をその基となるデータに同期し続けることである。

import javafx.gui.Frame;
import javafx.gui.Button;

var myString = "Click Me";

Frame {
width: 50
height: 50
visible: true
content:
Button {
text: bind myString
}
}
// コードのほかの部分でmyStringを変更すると、
// ボタン上の文字列も自動的に変更される。

データ結合は、第8章で詳しく取り上げられる。

1.6 引き金
引き金は、ある条件が満たされると実行されるコードの区画である。たとえば、ある属性の値が不適切なものに設定されることを、防ぐための処置を講じたいと思うことがあるかもしれない。次の例は、引き金の基本構文を示す。

import java.lang.System;

ReplaceDemo {
mySensitiveData: "Will anyone notice?"
}

class ReplaceDemo {
attribute mySensitiveData: String
on replace {
System.out.println("I noticed a change!");
};
// 応用特有の保護手段コードがここに書かれる
}

引き金は、第9章で詳しく取り上げられる。