変数
変数は、AliceScriptにおける主要な概念の一つです。変数は、任意の場所で宣言定義でき、その値を取り出したり代入することができます。
この記事では、多くの変数に共通する事項を説明した後、それぞれの型の特徴について説明します。
変数は、すべて基となるvariableから派生しています。これは、すべての変数に共通した操作セットを提供します。
AliceScriptの変数は、文字またはアンダースコアから始まり、任意の数の文字、数字、記号が続きます。予約語を使用することはできません。次の例では、aという変数に123を代入し定義します。その後で、その変数の値をPrint関数を使って出力します。
var a = 123; print(a);
通常、変数に代入されるのは常にその値です。つまり、ある変数に式の値を代入するとその値がコピーされ代入されます。 通常、変数を定義する際は次の形で宣言します。
var (修飾子) 名前 = 値;
ローカル変数とスコープ
変数はその有効な範囲内で、一意な名前である必要があります。この範囲をその変数のスコープと呼びます。スコープの範囲内では、同じ名前の変数を定義することはできませんし、反対にスコープの外に出ると、その範囲内で定義した変数は使用できません。 AliceScriptでいうところのスコープの範囲は、原則としてそのコードのブロック内です。コードのブロックは、およそそのコードの波括弧の中を指します。次の例を参照してください。
function Func()
{
var a = 123;
}
Func();
print(a);//例外発生
上記の例ではFuncを呼び出すことで、ローカル変数aが定義されていますがそのスコープの範囲外での呼び出しのため、関数外で変数aを使用することはできません。また、インクルードしたファイルに対してもスコープが適用されます。このため、異なるスクリプトファイル間でローカル変数を共有することはできません。
グローバル変数
ローカル変数と反対の性質を持つものとして、グローバル変数があります。これは、スコープ内外のどこでも定義でき、定義されたスコープ外でもその変数を使用できます。グローバル変数はスクリプトではなくインタプリタに直接登録されます。その変数をグローバル変数として宣言定義するにはglobalキーワードを使用します。
function Func()
{
var global a = 123;
}
Func();
print(a);//出力:123
上記の例ではFuncを呼び出すことで、グローバル変数aが定義されているため、Funcの呼び出し後には、そのインタプリタで実行されるすべてのコードでグローバル変数aが使用できます。
定数
定数は、変数とは異なり、一度宣言すると再度代入したり値を変更することができません。これは、プログラム上で変更されたくない値(トークンなど)を定義する際に役立ちます。定数にもスコープが存在し、ローカル定数とグローバル定数があります。定数を定義するにはvarキーワードの代わりにconstキーワードを使用します。
const KEY = “ABCD”; print(KEY);//出力例:ABCD KEY = “EFGH”;//例外発生
型
AliceScriptのすべての変数および定数は、値に評価されるすべての式と同じように、型を持ちます。インタプリタはコード内で実行されるすべての演算が型安全になるようにします。例えばnumber型の変数には、その値を加算したり減算したりする算術演算が許可されます。しかし、bool型にはその種類の演算は許可されません。次に、特定の型の規定値を使用して変数を初期化する例を示します。
var v = type.Activate();
型には次の種類があります。
variable型
variable型は、すべての変数の値を表します。variable型は等値演算子をサポートします。この型から文字列型にのみ暗黙的な変換をサポートします。variable型のメソッドは次の通りです。
- variable.Dispose
- variable.Equals
- variable.Clone
- variable.DeepClone
- variable.ToString
- variable.Properties
- variable.Type
- variable.Convert
number型
数値型は実数を表します。数値型は算術、比較、等値演算子をサポートしています。
AliceScriptの数値型の表現できるおおよその範囲は、±5.0 × 10−324 - ±1.7 × 10308(-15~17桁)で、サイズは8バイトです。
数値型の規定値はゼロ0です。また、数値型で非数、正方向の無限、負方向の無限を表す定数がそれぞれ、NaN、PositiveInfinity、NegativeInfinityとして定義されています。
数値型への暗黙的な変換は存在しません。型変換演算子を使用するかConvertメソッドを使って、文字列型、bool型、bytes型からの明示的な変換がサポートされています。また、数値型専用のメソッドは存在しません。この型の型指定修飾子はnumberです。
bool型
bool型は、ブール値の論理数を表します。bool型は論理、比較、等値演算子をサポートしています。
bool型の有効な値はtrueかfalseのいずれかです。
それぞれの値を表す定数がそれぞれ、true、falseとして定義されています。
bool型への暗黙的な変換は存在しません。特に、WSOFTScriptとは違い数値型の代わりに値を使用することはできません。また、文字列型、数値型、bytes型からの明示的変換がサポートされます。bool型専用のメソッドは存在しません。この型の型指定修飾子はboolです。
bytes型
bytes型は、バイナリデータ配列を表します。bytes型は比較、等値演算子をサポートしています。
bytes型の規定値はnullです。この型はnullをとり得ます。この型の型指定修飾子はbytesです。
bytes型への暗黙的な変換は存在しません。また、文字列型、数値型、bool型からの明示的変換がサポートされます。bytes型専用のメソッドは存在しません。
none型
none型の有効な値は唯一nullです。この型はnullをとります。また、null型は比較演算子のみをサポートします。
nullの値を表す定数がnullとして定義されています。
null型への暗黙的な変換および明示的な変換はサポートされていません。
string型
文字列型は、テキストを一連のUTF-16コード単位として表現します。文字列型は結合、比較、等値演算子をサポートしています。
文字列型の規定値は空の文字列””です。また、この型の型指定修飾子はstringです。
すべてのAliceScriptに組み込まれている型はすべて文字列型への暗黙的な変換をサポートしています。文字列型に限って、明示的な変換と明示的な変換は同じ動作になります。文字列型のメソッドは次のものがあります。
- string.Trim
- string.TrimStart
- string.TrimEnd
- stirng.StartsWith
- string.EndsWith
- string.PadLeft
- string.PadRight
- string.Normalize
- string.CompareTo
- string.IsNormalized
- string.IndexOf
- string.LastIndexOf
- string.Contains
- string.Replace
- string.Split
- string.ToLower
- string.ToUpper
- string.EmptyOrWhiteSpaces
- string.Format
array型
配列型は、インデックスを使用してアクセスできる変数のリストを表します。配列型は、結合、比較、等値演算子をサポートしています。
配列型の規定値は空の配列[]です。この型はnullをとり得ます。この型の型指定修飾子はarrayです。
配列型は必ずしも要素を含む必要も、同一の型である必要もありません。配列型への暗黙的な変換はサポートされていません。 明示的な変換を行うとき、その値を唯一の要素とする配列型に変換されます。配列型のメソッドには次のものがあります。
- array.Add
- array.AddRange
- array.Remove
- array.RemoveAt
- array.Insert
- array.RemoveRange
- array.IndexOf
- array.Contains
- array.Sort
- array.Reverse
- array.First
- array.Last
- array.Flatten
- array.Merge
- array.Foreach
delegate型
デリゲート型は、匿名関数のように一連のステートメントのまとまりを表します。デリゲート型は結合、比較、等値演算子をサポートしています。
デリゲート型の規定値は空のステートメント{}です。この型はnullをとり得ます。デリゲート型への暗黙的な変換と明示的な変換の両方はサポートされていません。この型の型指定修飾子はdelegateです。
デリゲート型は、配列のように複数の要素を持つことができます。しかし、デリゲート型にはデリゲート型以外の要素を含めることはできません。 デリゲートについての詳しい説明はデリゲートの記事を参照してください。デリゲート型のメソッドには次のものがあります。
type型
type型は、変数の型を表します。type型は比較、等値演算子をサポートしています。type型の規定値は、type.Noneです。type型への暗黙的な変換はサポートされていませんが、文字列型からの明示的な変換はサポートされます。この型の型指定修飾子はtypeです。type型のメソッドには次のものがあります。