Tadotter - Eclipse RCP版 (1.1.2.v20090921) | 2009-09-21 15:19 |
Tadotter - JavaFX版 (2.0.1) | 2009-07-06 11:19 |
JavaFX Scriptプログラム言語を学ぼう
さて、あなたはパッケージを理解しました。 私達はJavaFXプログラム言語が提供する様々なアクセス修飾子についてお話します。 この特殊なキーワードは、あなたの変数、関数やクラスの可視属性の様々なレベルを設定できるようにします。 さらに詳しい情報は、 JavaFX言語リファレンスの 8章. アクセス修飾子をご覧ください。
デフォルトのアクセスは、「スクリプト限定」として知られていて、アクセス修飾子を与えないときに 得られるものです。これはチュートリアルのほとんどを通して私達が使ってきたものです。
例:
var x; var x : String; var x = z + 22; var x = bind f(q);
このレベルのアクセスを使うと、変数の初期化、オーバーライド、参照、設定やバインドが スクリプトの中から可能です。他のソースからはこの情報を読んだりアクセスすることができません。
変数、関数やクラスを同じパッケージの他のコードにアクセスさせるには、packageアクセス修飾子を使います。
package var x;
前のレッスンに書いたpackage宣言と、このアクセス修飾子を混同しないように気をつけてください。
例:
// Inside file tutorial/one.fx package tutorial; // places this script in the "tutorial" package package var message = "Hello from one.fx!"; // this is the "package" access modifier package function printMessage() { println("{message} (in function printMessage)"); } // Inside file tutorial/two.fx package tutorial; println(one.message); one.printMessage();
あなたはこのサンプルをコンパイルして(tutorialの親ディレクトリから)次のコマンドで 実行することができます。
javafxc tutorial/one.fx tutorial/two.fx javafx tutorial/two
出力結果:
Hello from one.fx! Hello from one.fx! (in function printMessage)
protectedアクセス修飾子は変数や関数を、同じパッケージの他のコードと、 パッケージを問わずサブクラスからのアクセスを可能にします。
例:
// Inside file tutorial/one.fx package tutorial; public class one { protected var message = "Hello!"; } // Inside file two.fx import tutorial.one; class two extends one { function printMessage() { println("Class two says {message}"); } }; var t = two{}; t.printMessage();
このデモをコンパイルして実行してみます。
javafxc tutorial/one.fx two.fx javafx two
出力結果:
Class two says Hello!
注意:このアクセス修飾子はクラスに適用できません。なぜなら私達はoneクラスをpublicとしたからです。
publicなクラス、変数や関数はもっとも良く見えます。 あらゆるパッケージのあらゆるクラスやスクリプトからアクセスできます。
例:
// Inside file tutorial/one.fx package tutorial; public def someMessage = "This is a public script variable, in one.fx"; public class one { public var message = "Hello from class one!"; public function printMessage() { println("{message} (in function printMessage)"); } } // Inside file two.fx import tutorial.one; println(one.someMessage); var o = one{}; println(o.message); o.printMessage();
この例をコンパイルして実行します。
javafxc tutorial/one.fx two.fx javafx two
出力結果:
This is a public script variable, in one.fx Hello from class one! Hello from class one! (in function printMessage)
public-readアクセス修飾子はpublicに参照可能な変数を定義しますが、 (デフォルトでは)そのスクリプトの中からだけは書き込みが可能です。 書き込みのアクセス対象を広げるには、packageかprotected修飾子を頭に付けてください。 (例えばpackage public-readやprotected public-read) そうすれば、書き込みアクセスはpackageやprotectedレベルに設定されます。
例:
// Inside file tutorial/one.fx package tutorial; public-read var x = 1; // Inside tutorial/two.fx package tutorial; println(one.x);
この例をコンパイルして実行します。
javafxc tutorial/one.fx tutorial/two.fx javafx tutorial/two
出力結果は"1"です。これはxがtutorial/one.fxスクリプトの外から参照できることを裏付けます。
これから、その値を変更してみましょう。
// Inside tutorial/two.fx package tutorial; one.x = 2; println(one.x);
結果はコンパイルエラーとなりました。
tutorial/two.fx:3: x has script only (default) write access in tutorial.one one.x = 2; ^ 1 error
これを動かすには、私達はxの書き込みアクセス対象を広げなければなりません。
// Inside file tutorial/one.fx package tutorial; package public-read var x = 1; // Inside tutorial/two.fx package tutorial; one.x = 2; println(one.x);
例は今度はコンパイルできコンソールに"2"を印字するでしょう。
public-initアクセス修飾子は、あらゆるパッケージのオブジェクトリテラルで、 publicに初期化できる変数を定義します。 しかしながら、その後の書き込みアクセスは、public-readと同様の規制がなされます。 (デフォルトではスクリプトレベルの書き込みアクセスですが、packageやprotectedを前に 付けるとそれに応じて書き込みアクセス対象が広がります。) この変数の値は常にあらゆるパッケージから参照可能です。
例:
// Inside file tutorial/one.fx package tutorial; public class one { public-init var message; } // Inside file two.fx import tutorial.one; var o = one { message: "Initialized this variable from a different package!" } println(o.message);
例をコンパイルして実行します。
javafxc tutorial/one.fx two.fx javafx two
これは"Initialized this variable from a different package!"を印字し、 異なるパッケージのオブジェクトリテラルがmessage変数を初期化できることを裏付けます。 しかし、その後の書き込みアクセスはスクリプトに限定されますから、 私達はその値を変更できません。
// Inside file two.fx import tutorial.one; var o = one { message: "Initialized this variable from a different package!" } o.message = "Changing the message..."; // WON'T COMPILE println(o.message);
コンパイルエラーはこうなります。
two.fx:12: message has script only (default) write access in tutorial.one o.message = "Changing the message..."; // WON'T COMPILE ^ 1 error
これは期待される行動を次のように確認しています。 変数はpublicに初期化できますが、その後の書き込みアクセスは異なるレベルのアクセスで規制されています。
[PageInfo]
LastUpdate: 2009-07-27 16:26:11, ModifiedBy: happyhills
[Permissions]
view:all, edit:login users, delete/config:members