構文 - Script Language
|
1 2 3 4 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
C++と同等の組み込み型が用意されています。
| 型名 | 最小値 | 最大値 |
| int8 | -128 | 127 |
| int16 | -32768 | 32767 |
| int int32 | -2147483648 | 2147483674 |
| int64 | -92233772036854775808 | 9223372036854775807 |
| uint8 | 0 | 255 |
| uint16 | 0 | 65535 |
| uint uint32 | 0 | 4294967295 |
| uint64 | 0 | 18446744073709551615 |
| 型名 | 値の範囲 | 一番小さい正の値 | 最大桁数 |
| float | +/- 3.402823466e+38 | 1.175494351e-38 | 6 |
| double | +/- 1.7976931348623158e+308 | 2.2250738585072014e-308 | 15 |
配列の変数は次のように宣言します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
配列はC++と同様にインデクス式を使ってアクセスします。
また,配列の長さはlength()メソッドにより取得できます。
1
2
3
4
5
| - | ! | |
ユーザー定義型(クラスや列挙型)の変数はC++と同様に宣言することができます。
1 2 3 4 5 6 | |
オブジェクトハンドルとはC++でいう参照・ポインタにあたるものです。
参照先のオブジェクトは参照カウンタで寿命を管理しているため,「既に破棄されたデータにアクセスする」という不正なデータアクセスはおこりません。
もしnullなオブジェクトハンドルにアクセスしようとしたら例外が発生しスクリプトの実行が止まります。
1
2
3
4
5
6
7
8
9
10
11
| - | ! | |
ASでの文字列は8bitもしくは16bitのデータの配列として扱われます。
ASではC++と同等のエスケープシーケンス文字が用意されています。
下記がエスケープシーケンス文字をまとめた表です。
| 文字 | 値 | 意味 |
| ¥0 | 0 | null文字 |
| ¥¥ | 92 | バックスラッシュ |
| ¥' | 39 | シングルコーテーション |
| ¥" | 34 | ダブルコーテーション |
| ¥n | 10 | 改行文字 LF |
| ¥r | 13 | 改行文字 CR |
| ¥t | 9 | TAB |
| ¥xFFFF | 0xFFFF | 16bitで表した文字 |
| ¥uFFFF | 0xFFFF | unicode16bitで表した文字 |
| ¥uFFFFFFFF | ¥0xFFFFFFFF | unicode32bitで表した文字 |
文字列はダブルコーテーションもしくはシングルコーテーション(要オプション設定)で囲んで表します。
1 2 3 4 5 6 7 8 | |
C++と同様に複数の文字列を1つの文字列として連結することができます。
1 2 3 | |
ASでは"""を使うことで複数行に渡す文字列を簡単に記述することができます。
1 2 3 4 5 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
C++同様の式文が使えます。詳しくは式の項をご覧ください。
1 2 | |
C++同等のif文が使えます。
ただし,C++と異なり,C#のように条件部はbool値である必要があります。
C++と同等のfor文が使えます。
ただし,条件部はif文と同じようにbool値である必要があります。
C++と同等のwhile文が使えます。
ただし,条件部はif文と同じようにbool値である必要があります。
C++と同等のdo-while文が使えます。
ただし,条件部はif文と同じようにbool値である必要があります。
C++と同様のswitch文が使えます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| - | | | | | | | | | | | ! | |
C++と同様のreturn文が使えます。
C++と同様のスコープブロック文が使えます。
C++と同様の代入式が使えます。
1 | |
C++と同等の代入式が使えます。
ASのシフト演算はC++のものと異なり,左シフト,符号無し右シフト,符号有り右シフトの3種類のシフトが使えます。
1 2 | |
使用可能な代入演算記号は下記の通りです。
+= -= *= /= = &= |= ^= <<= >>= >>>=
C++と同様の関数呼び出しが使えます。
1 2 3 4 | |
オブジェクトハンドルの型変換の例を下記に示します。
もし,オブジェクトハンドルの型変換に失敗したらnullのオブジェクトハンドルが返されます。
1 2 3 4 5 6 7 | |
組み込み型の値の変換の例を下記に示します。
1 2 3 4 5 | |
C++と同様の算術演算式が使えます。
c = -(a + b);
| 演算記号 | 説明 | 左項 | 右項 | 結果 |
| + | 正符号演算 | - | 数値 | 数値 |
| - | 負符号演算 | - | 数値 | 数値 |
| + | 加算 | 数値 | 数値 | 数値 |
| - | 減算 | 数値 | 数値 | 数値 |
| * | 乗算 | 数値 | 数値 | 数値 |
| / | 除算 | 数値 | 数値 | 数値 |
| % | 余算 | 数値 | 数値 | 数値 |
C++と同等のビット演算式が使えます。
ASではD言語のように右シフトが2種類に増えています。
c = ~(a | b);
| 演算記号 | 説明 | 左項 | 右項 | 結果 |
| ビット反転 | - | 数値 | 数値 | |
| & | ビット論理積 | 数値 | 数値 | 数値 |
| | | ビット論理和 | 数値 | 数値 | 数値 |
| ^ | ビット排他論理和 | 数値 | 数値 | 数値 |
| << | 左シフト | 数値 | 数値 | 数値 |
| >> | 右シフト | 数値 | 数値 | 数値 |
| >>> | 算術右シフト | 数値 | 数値 | 数値 |
C++と同等の論理演算式が使えます。
ASでは,not,and,or,xorが既存の演算記号の代わり使うことができます。
if ( a and b or not c ) {}
| 演算記号 | 説明 | 左項 | 右項 | 結果 |
| not ! | 論理否定 | - | bool値 | bool値 |
| and && | 論理積 | bool値 | bool値 | bool値 |
| or || | 論理和 | bool値 | bool値 | bool値 |
| xor | 排他論理和 | bool値 | bool値 | bool値 |
C++と同様の等値式が使えます。
C++と同様の比較式が使えます。
1 2 3 4 | |
2つのオブジェクトハンドルが示すものが同じかどうかを調べる式です。
C++と同様のインクリメンタル式,デクリメンタル式が使えます。
1 2 3 4 5 6 7 8 9 10 11 | |
C++と同様のインデクス式が使えます。
添え字に使う型は,インデクス式がオーバーロードできるためオブジェクトのタイプごとに異なります。
arr[i] = 1;
C++と同等の三項条件式が使えます。
if文と同様に,条件部はbool値である必要があります。
condition ? a : b;
object.property = 1; object.method();
C++と同様にオブジェクトのメンバにアクセスできます。
ASではオブジェクトにプロパティアクセサを持つことができるため
メンバ変数にアクセスしているように見えて,実際は関数を呼び出しているということもありえます。
詳細はクラスのプロパティアクセサの項をご覧ください。
オブジェクトのハンドルにアクセスする際に頭に@をつけます。
この記号を使うことで,オブジェクトハンドルが指すオブジェクトを変更したり,参照したりします。
1 2 3 4 5 | |
C++と同様の丸括弧が使えます。
a = c * ( a + b );
C++に似たスコープ解決演算子が使えます。
::を使うことでグローバル変数・関数を指定することができます。
1
2
3
4
5
6
| - | | ! | |
オブジェクトハンドルはオブジェクトの参照を保持することができる型です。
オブジェクトハンドルを使うことで,1つのオブジェクトを複数の変数からアクセスできるようになります。
C++でいうポインタや参照と同じようなものだと考えてください。
オブジェクトハンドルの型は型名 + @で表現します。
object@ obj_h;
このコードでは,obj_hにnull参照が保持されます。
null参照が保持されている状態は,オブジェクトの参照を保持していない状態と考えてください。
オブジェクトハンドルが参照しているオブジェクトのメンバへのアクセスは
通常のオブジェクトのメンバへのアクセスと同じようにアクセスします。
object obj; object@ obj_h; obj.Method(); obj_h.Method();
もし,オブジェクトハンドルがnull参照を保持している状態でメンバへアクセスしようとすると
例外が発生し,実行中のスクリプトが停止します。
オブジェクトハンドルの変数に対して代入演算子=を使うと,
通常のオブジェクト変数に対して代入演算を記述したときと同じことが行われます。
object obj; object@ obj_h; obj_h = obj;
もちろん,オブジェクトハンドルがnull参照を保持している場合は例外が発生します。
オブジェクトハンドルが保持する参照をコピーしたい場合は@記号を使います。
object obj; object@ obj_h; @obj_h = @obj;
同一性式を使うことで,2つのオブジェクトハンドルが同じオブジェクト参照を保持しているか調べることが出来ます。
object@ obj_a, obj_b;
if ( obj_a is obj_b ) {}
if ( obj_a !is null ) {}
オブジェクトハンドルが参照するオブジェクトは
全てのオブジェクトハンドルから参照を保持されなくなった時点で解放されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| - | | | | | ! | |
オブジェクトハンドルを使うことで基底クラス・インターフェースのへの変換やダウンキャストを実現します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| - | | | - | ! | - | ! ! | |
ASのインターフェースはC#やD言語と同等のものと考えてもらって構いません。
インターフェースにはC++でいう純粋仮想関数を宣言することができます。
ただし,C#やD言語のインターフェースとは異なり,インターフェースが他のインターフェースを継承することはできません。
その代わり,クラスは複数のインターフェースを継承することができます。
C++と同様のenumが使えます。
1
2
3
4
5
6
7
| - | | | | ! | |