変数の種類


変数はスクリプトレベルでも(スクリプト変数)、 クラス内でも(インスタンス変数)、またブロック内でも(ローカル変数) 宣言することができます。


スクリプト変数

スクリプト変数は、(クラス定義やブロックの内側と違って)スクリプトのトップレベルで宣言される変数です。 スクリプト変数は、メンバ変数のアクセス修飾子なしにスクリプト全体から見えます。

var thing = "Thing"; 
class A { 
   function getThing() : String { thing } 
}

アクセス修飾子を加えることなしには、スクリプト変数はそのスクリプトの外からは見えません。 もしアクセス修飾子が、スクリプトの外からスクリプト変数が見えるように追加されたら、 それらはスクリプトのメンバ変数としてアクセスされます。 変数のアクセス修飾子は、public, protected, package, public-read, そして public-initです。 アクセス修飾子の章を参照してください。

例:もしこれがスクリプトFoo.fxだとすると

public def bohr = 0.529177e-10

スクリプトNoof.fxはbohrにアクセスできます。

println(Foo.bohr)

スクリプト変数の寿命は、そのスクリプトがロードされてからプログラムの実行が終わるまでです。


インスタンス変数

インスタンス変数はクラスのトップレベルで宣言されます。 クラス(及びそのサブクラス)の宣言の中では、インタンス変数は、変数の名前を使うだけで簡単にアクセスされます。 クラスの外では、これらはメンバーであるところのオブジェクトを通してアクセスされます。

例:

def anA = A{ rat: true }; 
println(anA.rat); 
class A { 
   var rat : Boolean; 
   function isIt() { rat }  
}  
class B { 
   function wellisIt() { anA.rat } 
}

アクセス修飾子(public, protected, package, public-read, そして public-init)はインスタンス変数の 可視性を制御します。もしアクセス修飾子が与えられていない場合は、 インスタンス変数はそのスクリプトの中でだけ見えます。

インスタンス変数の寿命は、そのクラスのインスタンスの寿命になります。


ローカル変数

ローカル変数はブロック内で宣言され、そのブロックは関数の本体も含みます。 ローカル変数はもっとも内側のブロック内でのみ見えます。 そのスコープはブロックの全体を含み、変数宣言から下だけではありません。 メンバ変数のアクセス修飾子は、ローカル変数には適用できません。 アクセス修飾子は、ローカル変数宣言に適用されるべきではありません。

[To do: ブロック全体がスコープになるルールを説明し、例を与える。]

ローカル変数の寿命は、そのブロックがが存在する間です。

スクリプト変数とインスタンス変数と違っているのは、ローカル変数宣言と式は、 それらが型と値を持つということです。 その型は変数型であり、その値は変数の値です。


パラメータ、カウンタ変数、他の式パラメータ

関数の引数は関数本体の中でのみ見えます。 for文のカウンタ変数(原文:induction variables)はfor文本体の中でのみ見えます。 その他の式パラメータのスコープはその式です。

それらは値を割り当ててはいけません。

関数の章を参照してください。 構文については for文on replace句を参照してください。


Home