= プロパティ変数


== プロパティ変数

プロパティ変数とは、Java 言語において、
System.getProperty()やSystem.setProperty()
で提供されたシステムの状態を格納する枠組みを変数風にしたものです。

プロパティ変数名は、$記号で始まります。

{{{
>>> $konoha.package.path
"/usr/local/kohoha/package-0.7"

}}}

これは、次とまったく同じです。つまり、シンタックスシュガーです。
（変数や定数に比べると、アクセスはあまり早くありません。）

{{{
>>> Context.getProperty("kohoha.package.path")
"/usr/local/kohoha/package-0.7"

}}}

Javaとの違いは、System/Context の2段構成になっていて、
通常はContextごとに異なるプロパティ変数の値を持つことができます。

=== プロパティ変数のリスト

$konohaで始まるプロパティ変数は、一覧は次のとおり得られます。

{{{
>>> $konoha.*
[]
["konoha.bin.path", "konoha.os", "konoha.package.path", "konoha.path", 
"konoha.platform", "konoha.regex", "konoha.script.path", "konoha.version", 
"konoha.temp.path"]

}}}

これは、次のメソッドのシンタックスシュガーです。

{{{
>>> Context.listProperties("konoha.*");
["konoha.bin.path", "konoha.os", "konoha.package.path", "konoha.path", 
"konoha.platform", "konoha.regex", "konoha.script.path", "konoha.version", 
"konoha.temp.path"]

}}}

=== 環境変数とプロパティ変数

環境変数は、$env. で始まるプロパティ変数にバインドされています。

{{{
>>> $env.HOME
"/home/konoha"

}}}

今のところ、!ReadOnly です。(拡張してかまいません。)

=== プロパティ変数と型学習

プロパティ変数は、型宣言できないので、明示的な型はありません。

Konohaは、結構、型にうるさい言語なのにそれでは困るということも多々ありまして、
若干、不思議な表現ですが、型を学習します。

つまり、
プロパティ変数を一度定義してしまえば、同じ型の値しか設定できなくなります。
（残念ながら静的に型チェックはできせんが、）

{{{
>>> s = $konoha.path;
>>> typeof(s)                      // 変数も型推論される
String
>>> s
"/usr/local/konoha"
>>> $konoha.path = 1;

[(shell):5] PropertyType!!: $konoha.path must be String
  at (unknown:0):Context.setProperty(key="konoha.path",value=1)
  at ((shell):5):main.Script

}}}

[[include(KbookIndex)]]
[[include(KbookFooter)]]

