変数と型指定

var変数

CRS言語においては、一時的な値を保持するための構文としてvar変数が用意されています。

var a; /* 変数aを定義し、null値で初期化します */
var b = 1; /* 変数bを定義し、数値を代入 */

a = "文字列1"; /* 変数aに文字列を代入 */

print(a); /* 変数aの値を出力します */

変数に格納できる型

変数に格納できる型は大きく分けて「プリミティブ値」と「オブジェクト参照」の二つがあります。


プリミティブ値は、最も基礎的な値です。

CRS言語においてはnull型, boolean型, integer型, number型, fixed型, string型, binary型があります。


参照型は、Objectクラス(CRS::Common::Core名前空間)を継承したオブジェクトやメソッド、クラスインスタンス等が相当します。

クラス型の例としてはNumberクラス, Stringクラス, Recordクラス (それぞれCRS::Common::Core名前空間)等があります。

変数の型指定

この機能はBiz/Browser DT 1.1.0より追加されました


先述したように、var変数には「プリミティブ値」と「オブジェクト参照」が格納できます。

これにより、プログラムを記述する際は変数に格納する型を深く意識しなくても良くなりますが、 型を意識したコーディングを行いたい場合があります。

この場合、下記のような構文で変数の型を指定することが出来ます。

var a; /* 通常の変数定義 */
var b : String; /* bには「Stringクラス(CRS::Common::Core名前空間)」のオブジェクト参照のみが格納可能です */

a = "aaa"; /* OK, 特に制約なく格納可能 */
a = 1; /* OK, 同上 */
a = new String("111"); /* OK, 同上*/
a = new Record(); /* OK, 同上*/

b = "bbb"; /* OK, プリミティブ型のstring値は適切にStringクラスに変換されて渡されます */
b = 2; /* OK, プリミティブ型のinteger値は適切にStringクラスに変換されて渡されます */
b = new String("222"); /* OK, Stringクラスのインスタンスはそのまま格納可能 */
b = new Record(); /* NG(CRS例外発生), Stringクラス以外のオブジェクト参照は格納不可 */

現時点では上記の型指定構文でプリミティブ値を指定することはできません。


上記のように、「: クラス名」の形式で型を明示することを型指定と呼びます。

この型指定は、上記のvar変数の他にも下記にも指定可能です。

  • ユーザ定義関数 引数
  • ユーザ定義関数 戻り値
  • ラムダ式 引数
  • ラムダ式 戻り値
  • ユーザ定義プロパティ プロパティ型
/* 引数arg1でStringオブジェクトを, 引数arg2でNumberオブジェクトを受け取り、Record配列を返す関数 */
Function func(arg1:String, arg2:Number) : Record[] {
  ...
}
/* DisplayObjectクラス(CRS::Common::UI名前空間)のオブジェクトを返すラムダ式 */
var find_display_object = lambda[]() : DisplayObject {
  ...
};
/* プロパティ型を指定 */
namespace MyNS {
  class MyClass {
    peoperty prop : String {
      get() {
        ... /* Stringオブジェクトを返す必要あり */
      }
      set(v) {
        ... /* Stringオブジェクトを渡す必要あり */
      }
    }
  }
}