* 構文 - Script Language [#g9284ebe] #contents Last-modified: &lastmod(); ** このページについて [#ie2b0c1a] AngelScript(AS)のスクリプト構文について書きます。 (このページに書かれているサンプルコードの一部はAngelScript公式のドキュメントから転載しています。) ** 字句 [#i3b49282] *** コメント [#oda6fcbb] C++と同様に1行コメント,ブロックコメントの2種類が使えます。 #code(c,){{ // 1行コメント /* ブロックコメント */ }} ** 型 [#c13aa6fe] *** 組み込み型 [#pb10e35e] C++と同等の組み込み型が用意されています。 :void| C++と同様に関数の戻り値に型に使います。 :bool| C++と同様のもので,true,falseのどちらかの値を持ちます。 :整数| 下記のタイプが存在します。 |型名|最小値|最大値|h |int8|-128|127| |int16|-32768|32767| |int&br;int32|-2147483648|2147483674| |int64|-92233772036854775808|9223372036854775807| |uint8|0|255| |uint16|0|65535| |uint&br;uint32|0|4294967295| |uint64|0|18446744073709551615| 公式のドキュメントによると,パフォーマンスの最適化をするために 32bitより小さい型の値はクラスのメンバ変数など,データを保持するもののみに使用し, それ以外(ローカル変数,一時変数など)は32bitの型の値を使用したほうがいいようです。 :小数| 下記のタイプが存在します。 |型名|値の範囲|一番小さい正の値|最大桁数|h |float|+/- 3.402823466e+38|1.175494351e-38|6| |double|+/- 1.7976931348623158e+308|2.2250738585072014e-308|15| 公式のドキュメントによりますと,ASではNaN(Not-aNumber)を0x7fc00000で表現しているようです。 *** 配列 [#k3346995] 配列の変数は次のように宣言します。 #code(c,){{ // int型の配列を宣言 int[] intArray; // int型の配列を3つ宣言 int[] intArrA,intArrB,intArrC; // 何も初期化子を指定しなければ,長さ0の配列を作ります int[] a; // a.length() == 0 // 初期化子に数を指定すると,その数の長さの配列を作ります int[] b(3); // b.length() == 3 // 配列初期化子を指定すると,それがコピーされた配列を作ります。 int[] c = {1,2,3}; // 先頭から1,2,3がコピーされた配列 }} 配列はC++と同様にインデクス式を使ってアクセスします。 また,配列の長さはlength()メソッドにより取得できます。 #code(c,){{ int[] a = {0,1,2}; for ( uint i = 0; i < a.length(); ++i ) { a[i] += 1; } }} *** ユーザー定義型 [#r0f093c7] ユーザー定義型(クラスや列挙型)はC++と同様に宣言することができます。 #code(c,){{ // objという型のインスタンスが作られる // デフォルトコンストラクタがあればそれが呼ばれる obj a; // objの一時変数を作成し,aに代入する a = obj(); }} *** オブジェクトハンドル [#t39c8cfc] オブジェクトハンドルとはC++でいう参照・ポインタにあたるものです。 参照先のオブジェクトは参照カウンタで寿命を管理しているため,「既に破棄されたデータにアクセスする」という不正なデータアクセスはおこりません。 もしnullなオブジェクトハンドルにアクセスしようとしたら例外が発生しスクリプトの実行が止まります。 #code(c,){{ obj o; obj@ a; // a はnullで初期化されます obj@ b = @o; // oの参照をbに代入します b.ModifyMe(); // o.ModifyMe()と同様のことがおこります if ( a is null ) // nullかどうかチェックしています。 { @a = @b; // aにbが参照しているオブジェクトを代入します。この場合,結果的にoの参照が渡されています。 } }} *** 文字列 [#lec9ebac] ** 文 [#teb1f49c] *** 宣言文 [#ae71baed] *** 式文 [#o5c9ee2d] *** if文 [#p78a09e7] *** for文 [#baebd491] *** while文 [#j461bb07] *** do-while文 [#p5762b82] *** switch文 [#g0b99de9] *** return文 [#g7ecfbf7] *** スコープブロック文 [#kc357a28] ** 式 [#nb44a3d6] *** 代入式・代入演算式 [#yeb8cb21] *** 関数呼び出し [#w8040e1c] *** 型変換式 [#u9e1576c] *** 算術演算式 [#y7543ed9] *** ビット演算式 [#m1f0b534] *** 論理演算式 [#h7b6dcbb] *** 等値式 [#de0709a3] *** 比較式 [#j1bc3347] *** インクリメンタル式・デクリメンタル式 [#l7f3b00c] *** インデックス式 [#d8d6583e] *** 条件式 [#f2128c3e] *** メンバアクセス [#k8d2dc13] *** オブジェクトハンドルアクセス [#p581d30b] *** 丸括弧 [#ue94adc4] *** スコープ解決 [#zae249e6] ** オブジェクトハンドル [#o1d47802] *** 使い方 [#la326047] *** オブジェクトの寿命 [#b7126457] *** ポリフォリズム [#xe49a700] ** 関数 [#q7b2e2c2] ** 変数 [#d428e214] ** interface - インターフェース [#w64b11fd] ** import [#o4ad69c4] ** enum - 列挙型 [#ff101c74] ** typedef [#c9cfcf91] ** class - クラス [#ee65bf14] *** 使い方 [#o29dc089] *** 演算式オーバーロード [#wd33cb58] *** プロパティアクセサ [#l3502fb8] |