Variant
説明
数値、文字列、ツリーノード、または配列のいずれかを保持できるタイプです。
Variantクラスは、データをFlexSimの様々な機能の間で交換する際に不可欠なタイプです。そのため、バリアントは複数の異なるタイプのデータを保持できる「何でも屋」としての意味を持ち、数値を保持するnumberタイプ、テキストデータを保持するstringタイプ、FlexSimのツリーにあるノードへの参照を保持するtreenodeタイプ、バリアントの配列を保持するArrayタイプ、一連のキーおよびそのキーに関連付けられた値を保持するMapタイプ、そして、他のどのタイプにも属さないnullバリアントといった様々なタイプを表すことができます。
メソッド/プロパティ転送
バリアントは他のデータタイプに柔軟に対応できるコンテナ以上のものではないため、そのメソッドおよびプロパティもまた、バリアントが保持するタイプの様々なメソッドやプロパティに転送する役割しかありません。たとえば、ツリーノードを保持するバリアントがある場合、ツリーノードのメソッドおよびプロパティを直接バリアントに使用できます。as()キーワードでツリーノードにキャストする必要はありません。
Variant node = param(1);
node.name = "Object1";
node.value = 5;バリアントの唯一の専用プロパティとしてtypeがあります。これはバリアントが保持しているデータのタイプを通知するものです。その他のプロパティおよびメソッドはすべて、保持されたクラスに関連するメソッドまたはプロパティに転送を行うだけです。関連付けられたタイプをバリアントが保持していない場合、タイプのメソッドを呼び出すと例外が発生します。たとえば、バリアントが数値を持っておりfind()メソッドを呼び出した場合、FlexScriptは例外をスローします。
キャスト
バリアントは例外をスローすることなく、ターゲットタイプのいずれかに対してキャストを行います。バリアントがターゲットタイプを保持していない場合、単にnullまたはそれに近い結果、つまりNULLツリーノード、空の文字列、空の配列、または数値0.0を生成します。
Variant num = 1;
string asString = num; // empty string
Variant str = "Hello";
double asNum = str; // 0.0バリアントに保持されるデータのタイプを判断するには、typeプロパティ、またはis()キーワードを使用します。
オブジェクトとしてのバリアント
バリアントがオブジェクトデータを含むツリーノードを保持する場合、Objectプロパティおよびメソッドを利用できます。なお、typeプロパティは単純なtreenodeタイプです。バリアントがオブジェクトノードを保持しているかテストする場合、次のように()キーワードを使用します。
Variant obj = param(1);
if (obj.is(Object)) {
	obj.location = Vec3(1, 2, 3);
}配列としてのバリアント
バリアントは配列に関連付けられた特殊なロジックを実行します。このロジックでは、バリアントが配列データを保持していない場合であっても、バリアントを配列のように処理することができます。たとえば、バリアントが文字列を保持する場合、その最初の要素として文字列を含む長さ1の配列であるかのようにバリアントを処理することができます。
Variant val = "Hello";
int len = val.length; // len = 1
return val[len]; // returns "Hello";また、バリアントを非配列タイプにキャストした上でバリアントが実際に配列だった場合、キャスト操作によって配列の最初の要素が返されます。そのため、配列バリアントであっても非配列タイプとして処理することができます。
Variant myArray = ["Hello", "World"];
string myString = myArray;
return myString; // returns "Hello"これらの機能は処理フローで特に効果を発揮します。処理フローで取り扱うことの多いラベル値は配列データを格納している場合と格納していない場合がありますが、それらのデータに対して安定したインターフェイスが必要です。
マップとしてのバリアント
バリアントをマップとして使用する場合、バリアントの動的プロパティを使用します。
// adds the key "Key1" with the value 3 to the map
mapVariant.Key1 = 3 マップのその他のメソッドまたはプロパティは、バリアントからは利用できません。それらを使用する場合、バリアントをマップとしてキャストする必要があります。
Map map = mapVariant;
// now you can access map methods and properties
Array keys = map.keys;null値
バリアントがnullか確認するには、値を特殊キーワードnullvarと比較するか、値のタイプをVAR_TYPE_NULLマクロと比較します。
Variant val;
val == nullvar //true
val.type == VAR_TYPE_NULL // true他のプロパティによって返されたtreenodeタイプバリアントを取り扱う場合には、上記の確認はより複雑になります。treenode null値に関する説明を参照してください。
他のデータタイプにはnullタイプがありませんが、このタイプに相当する空のタイプがあります。
string emptyString = "";
int emptyInt = 0;
double emptyDouble = 0.0;
Array emptyArray = [];待機可能
バリアントは待機可能です。つまり、awaitステートメントの述語になることができます。これにより、一時停止されているコルーチンノードをバリアントが参照する場合のみ、コルーチンが一時停止されます。コルーチンノードへの参照を取得するには、awaitステートメントを含むノードに対してtreenode.coevaluate()を呼び出します。他のタイプのバリアント値を待機しても、何も行われません。
プロパティ
| animations | オブジェクトバリアントのanimationsプロパティを返します。 | 
| attrs | オブジェクトバリアントのattrsプロパティを返します。 | 
| centerObjects | オブジェクトバリアントのcenterObjectsプロパティを返します。 | 
| color | オブジェクトバリアントのcolorプロパティを返します。 | 
| dataType | ツリーノードバリアントのdataTypeプロパティを取得または設定します。 | 
| first | ツリーノードバリアントの最初のサブノードを取得します。 | 
| flags | オブジェクトバリアントのflagsプロパティを返します。 | 
| inObjects | オブジェクトバリアントのinObjectsプロパティを返します。 | 
| input | オブジェクトバリアントのinputプロパティを返します。 | 
| labels | ツリーノードバリアントのラベル、またはマップバリアントの文字列キーにアクセスします。 | 
| last | ツリーノードバリアントの最後のサブノードを取得します。 | 
| length | 配列長さのバリアントを取得または設定します。 | 
| location | オブジェクトバリアントのlocationプロパティを返します。 | 
| name | ツリーノードバリアントの名前を取得または設定します。 | 
| next | ツリーノードバリアントの次のノードを取得します。 | 
| outObjects | オブジェクトバリアントのoutObjectsプロパティを返します。 | 
| output | オブジェクトバリアントのoutputプロパティを返します。 | 
| prev | ツリーノードバリアントの次のノードを取得します。 | 
| rank | ツリーノードバリアントのランクを取得または設定します。 | 
| resetPosition | オブジェクトバリアントのresetPositionプロパティを返します。 | 
| rotation | オブジェクトバリアントのrotationプロパティを返します。 | 
| size | オブジェクトバリアントのsizeプロパティを返します。 | 
| stats | オブジェクトバリアントのstatsプロパティを返します。 | 
| subnodes | ツリーノードバリアントのサブノードにアクセスします。 | 
| type | 次のバリアントタイプのいずれか1つを取得します:VAR_TYPE_NUMBER、VAR_TYPE_STRING、VAR_TYPE_NODE、またはVAR_TYPE_ARRAY | 
| up | ツリーノードバリアントの親を取得または設定します。 | 
| value | ツリーノードバリアントのデータ値を取得または設定します。 | 
メソッド
| append | このバリアントに他のバリアントを追加します。 | 
| byteToCharIndex | 文字列バリアントに含まれる指定バイトのインデックスを返します。 | 
| charAt | 文字列バリアントに含まれる指定バイトインデックスの文字を返します。 | 
| charToByteIndex | 文字列バリアントに含まれる特定の文字インデックスと関連付けられたバイトインデックスを返します。 | 
| clone | バリアントのクローンを作成します。 | 
| concat | 2つのバリアントを配列に連結します。 | 
| copy | ツリーノードバリアントの新しいコピーを作成します。 | 
| destroy | ツリーノードバリアントを破棄します。 | 
| endsWith | 文字列バリアントが定義された文字列で終了するのか照会します。 | 
| evaluate | ツリーノードバリアントを評価します。 | 
| fill | 配列バリアントに定義された値を入力します。 | 
| find | パスによって、ツリーノードバリアントのサブツリーのノードを検索します。 | 
| getLocation | オブジェクトバリアントの位置を取得します。 | 
| getPath | ツリーノードバリアントのパスを取得します。 | 
| getVariable | オブジェクトバリアントの変数の値を取得します。 | 
| includes | 文字列バリアントが文字列を含むか照会します。 | 
| indexOf | 配列バリアントの要素インデックスを取得します。 | 
| join | 配列バリアントを文字列に結合します。 | 
| match | 文字列バリアント上の正規表現を整合します。 | 
| message | オブジェクトバリアントへメッセージを送ります。 | 
| padEnd | 文字列バリアントの末尾をpadStringで指定長さまでパディングします。 | 
| padStart | 文字列バリアントの始まりをpadStringで指定長さまでパディングします。 | 
| pop | 配列バリアントからの要素をポップします。 | 
| push | 値を配列バリアントにプッシュします。 | 
| repeat | 文字列バリアントを何度か繰り返します。 | 
| replace | 文字列バリアントのテキストを置換します。 | 
| resume | オブジェクトバリアントをstop()実行前の状態に戻します。 | 
| reverse | 配列バリアントを反転させます。 | 
| search | 文字列バリアントで内部文字列またはパターンを検索します。 | 
| setLocation | |
| setRotation | オブジェクトバリアントの回転を設定します。 | 
| setSize | オブジェクトバリアントのサイズを設定します。 | 
| setState | オブジェクトバリアントの状態を設定します。 | 
| setVariable | オブジェクトバリアントの変数の値を設定します。 | 
| shift | 配列バリアントの先頭からの要素をシフト(ポップ)します。 | 
| slice | 配列バリアントのサブセクションから作成された新しい配列を返します。 | 
| sort | 配列バリアントを並べ替えます。 | 
| splice | 配列バリアントから要素を削除するもしくは配列バリアントに挿入します。 | 
| split | 文字列バリアントを配列に分割します。 | 
| startsWith | 文字列バリアントが定義した文字列で開始するのか照会します。 | 
| stop | オブジェクトバリアントを停止してその状態を設定してから、resume()を待ちます。 | 
| substr | 文字列バリアントのセクションを抽出して新しい文字列を返します。 | 
| toLowerCase | 文字列バリアントから小文字の文字列を作成します。 | 
| toNum | 文字列バリアントの内容を浮動小数点数として解釈します。 | 
| toUpperCase | 文字列バリアントから大文字の文字列を作成。 | 
| trim | 文字列バリアント末尾の余白をトリムします。 | 
| unshift | 値を配列バリアントの先頭にアンシフト(プッシュ)します。 | 
演算子
| - | 2つの数値を減算します。 | 
| -- | 数値バリアントを減少させます。 | 
| ! | バリアントがnullバリアント、NULLツリーノード、もしくは数値0.0であるかをテストします。 | 
| != | バリアントが他の値と異なっているかテストします。 | 
| % | 2つの数値における係数を返します。 | 
| * | 2つの数値を乗算します。 | 
| / | 2つの数値を除算します。 | 
| [] | 配列バリアントの要素にアクセスします。 | 
| + | 2つの数値を加算します。 | 
| ++ | 数値バリアントを増加させます。 | 
| += | 数値バリアントを定義した値で増加させるか、文字列を現在の文字列バリアントに追加します。 | 
| < | バリアントが数値未満かテストします。 | 
| <= | バリアントが数値未満または等しいかテストします。 | 
| -= | 数値バリアントを定義した値で減少させます。 | 
| == | 2つの値がお互いに等しいかテストします。 | 
| > | バリアントが数値より大きいかテストします。 | 
| >= | バリアントが数値より大きいまたは等しいかテストします。 | 
詳細
Variant.animations
readonly animations
説明
オブジェクトバリアントのanimationsプロパティを返します。
このプロパティは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.centerObjects
readonly centerObjects
説明
オブジェクトバリアントのcenterObjectsプロパティを返します。
このプロパティは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.length
int length
説明
配列長さのバリアントを取得または設定します。
バリアントがすでにArrayタイプである場合は、Array.lengthに転送されます。バリアントがnullバリアントの場合、lengthは0を返します。number、string、またはtreenodeタイプの場合、lengthは1を返します。
Variant myVar; // initialized as null Variant
myVar.length; // returns 0
myVar = 5; // set to number type
myVar.length; // returns 1lengthを設定した場合、バリアントは自分自身を配列に変換してArray.lengthに転送します。
Variant myArray = "Hello";
myArray.length = 2; // converts to Array and sets Array length to 2.Variant.outObjects
readonly outObjects
説明
オブジェクトバリアントのoutObjectsプロパティを返します。
このプロパティは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.resetPosition
readonly resetPosition
説明
オブジェクトバリアントのresetPositionプロパティを返します。
このプロパティは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.getLocation()
| Vec3 getLocation( double xFactor , double yFactor , double zFactor ) | 
| Vec3 getLocation( Vec3 factors ) | 
パラメータ
| xFactor | オブジェクト上で、位置が測定されるポイントのx値。オブジェクトのサイズに対する割合(0~1)として測定されます。 | 
| yFactor | オブジェクト上で、位置が測定されるポイントのy値。オブジェクトのサイズに対する割合(0~1)として測定されます。 | 
| zFactor | オブジェクト上で、位置が測定されるポイントのz値。オブジェクトのサイズに対する割合(0~1)として測定されます。 | 
| factors | オブジェクト上で、位置が測定されるポイントを表すベクトル。オブジェクトのサイズに対する割合(0~1)として測定されます。 | 
戻り値
| Vec3 | オブジェクトの位置を保持するベクトル。 | 
説明
オブジェクトバリアントの位置を取得します。
Object.getLocationに転送されます。このメソッドは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.message()
| Variant message( double delayTime = 0 , treenode fromObj = 0 , Variant p1 = nullvar , Variant p2 = nullvar , Variant p3 = nullvar ) | 
パラメータ
| delayTime | オプション。メッセージ実行までの遅延時間を指定します。-1の場合、メッセージは同時に送られます。0以上の場合、定義した遅延時間のイベントが作成されて、その遅延時間後にメッセージが実行されます。 | 
| fromObj | オプション。メッセージを送っているオブジェクト。メッセージトリガーからアクセスできます。 | 
| p1 | オプション。メッセージの最初のパラメータを定義します。メッセージトリガーからmsgparam1としてアクセスできます。 | 
| p2 | オプション。メッセージの2番目のパラメータを定義します。メッセージトリガーからmsgparam2としてアクセスできます。 | 
| p3 | オプション。メッセージの3番目のパラメータを定義します。メッセージトリガーからmsgparam3としてアクセスできます。 | 
戻り値
| Variant | メッセージが同時に送られた場合(delay = -1)、オブジェクトのメッセージトリガーによる戻り値を返します。メッセージが非同時で送られた場合(delay >= 0)、呼び出しによってイベントリストに作成されたイベントノードへの参照が返されます。 | 
説明
オブジェクトバリアントへメッセージを送ります。
Object.messageに転送されます。このメソッドは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.setLocation()
| Object setLocation( double x , double y , double z ) | 
| Object setLocation( double x , double y , double z , double xFactor , double yFactor , double zFactor ) | 
| Object setLocation( Vec3 loc , Vec3 factors ) | 
パラメータ
| x | 目的とするxの位置。 | 
| y | 目的とするyの位置。 | 
| z | 目的とするzの位置。 | 
| xFactor | オブジェクト上で、位置が測定されるポイントのx値。オブジェクトのサイズに対する割合(0~1)として測定されます。 | 
| yFactor | オブジェクト上で、位置が測定されるポイントのy値。オブジェクトのサイズに対する割合(0~1)として測定されます。 | 
| zFactor | オブジェクト上で、位置が測定されるポイントのz値。オブジェクトのサイズに対する割合(0~1)として測定されます。 | 
| loc | 目的とする位置を保持するベクトル。 | 
| factors | オブジェクト上で、位置が測定されるポイントを表すベクトル。オブジェクトのサイズに対する割合(0~1)として測定されます。 | 
戻り値
| Object | 平行移動したオブジェクト。 | 
説明
Object.setLocationに転送されます。このメソッドは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.setRotation()
| Object setRotation( double x , double y , double z ) | 
| Object setRotation( Vec3 rotation ) | 
パラメータ
| x | x軸に関する目的とする回転。 | 
| y | y軸に関する目的とする回転。 | 
| z | z軸に関する目的とする回転。 | 
| rotation | 目的とする回転値のベクトル。 | 
戻り値
| Object | 回転されたオブジェクト。 | 
説明
オブジェクトバリアントの回転を設定します。
Object.setRotationに転送されます。このメソッドは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.startsWith()
| int startsWith( string str ) | 
説明
文字列バリアントが定義した文字列で開始するのか照会します。
string.startsWith()に転送されます。バリアントがstringタイプでない場合には例外をスローします。
Variant.stop()
| stop( int stopState , int id = 0 , double priority = 0 , int stateProfile = 0 ) | 
パラメータ
| stopState | オブジェクトの次の状態。 | 
| id | オプション。停止リクエストを再開リクエストと照合する際に使用します。 | 
| priority | オプション。stop()呼び出し間のつながりを断つ際に使用します。 | 
| stateProfile | オプション。状態を記録する状態プロファイル。 | 
説明
オブジェクトバリアントを停止してその状態を設定してから、resume()を待ちます。
Object.stopに転送されます。このメソッドは、バリアントがオブジェクトデータを含むツリーノードでない場合には例外をスローします。Variant.substr()
| string substr( int startIndex , int length ) | 
パラメータ
| startIndex | 抽出する最初の文字の1ベースのバイトインデックス。このインデックスがマルチバイト文字の中間にある場合、文字全体を抽出します。負の数値の場合は、開始位置がstring.length + beginIndexになります。つまり、文字列の末尾からのオフセットになります。 | 
| length | ターゲット文字列の長さ(バイト単位)。 | 
戻り値
| string | 抽出された文字列。 | 
説明
文字列バリアントのセクションを抽出して新しい文字列を返します。
string.substrに転送されます。バリアントがstringタイプでない場合には例外をスローします。Variant.toLowerCase()
| string toLowerCase( ) | 
説明
文字列バリアントから小文字の文字列を作成します。
string.toLowerCase()に転送されます。バリアントがstringタイプでない場合には例外をスローします。
Variant.toUpperCase()
| string toUpperCase( ) | 
説明
文字列バリアントから大文字の文字列を作成。
string.toUpperCase()に転送されます。バリアントがstringタイプでない場合には例外をスローします。
Variant.operator --
| double operator --( ) | 
説明
数値バリアントを減少させます。
次の例では、treenode.labelPropertiesを使用してオブジェクトのラベル値を減少させています。
current.labelValue--;Variant.operator !
| int operator !( ) | 
戻り値
| int | バリアントがnullバリアント、NULLツリーノード、もしくは数値0.0である場合は真。それ以外では偽。 | 
説明
バリアントがnullバリアント、NULLツリーノード、もしくは数値0.0であるかをテストします。
次の例では、treenode.labelPropertiesを使用してオブジェクトのラベル値を比較しています。
if (!current.labelValue) {
	...
}Variant.operator !=
| int operator !=( int value ) | 
| int operator !=( double value ) | 
| int operator !=( string value ) | 
| int operator !=( treenode value ) | 
| int operator !=( Variant value ) | 
パラメータ
| value | 比較対象となる値。 | 
戻り値
| int | バリアントが値と異なっている場合は真、それ以外は偽。 | 
説明
バリアントが他の値と異なっているかテストします。
次の例では、treenode.labelPropertiesを使用してオブジェクトのラベル値を比較しています。
if (current.labelValue != 5) {
	...
}Variant.operator []
| Variant operator []( int index ) | 
パラメータ
| index | 配列要素のインデックス。 | 
戻り値
| Variant | 指定インデックスにおける配列要素。 | 
説明
配列バリアントの要素にアクセスします。
Array []演算子に転送されます。
バリアントは配列に関連付けられた特殊なロジックを実行します。このロジックでは、バリアントが配列データを保持していない場合であっても、バリアントを配列のように処理することができます。たとえば、バリアントが文字列を保持する場合、その最初の要素として文字列を含む長さ1の配列であるかのようにバリアントを処理することができます。
Variant val = "Hello";
int len = val.length; // len = 1
return val[len]; // returns "Hello";Variant.operator ++
| double operator ++( ) | 
説明
数値バリアントを増加させます。
次の例では、treenode.labelPropertiesを使用してオブジェクトのラベル値を増加させています。
current.labelValue++;Variant.operator +=
| Variant operator +=( double value ) | 
| Variant operator +=( string value ) | 
パラメータ
| value | バリアントに加算する値。 | 
説明
数値バリアントを定義した値で増加させるか、文字列を現在の文字列バリアントに追加します。
両方のオペランドが文字列の場合、バリアントは値をバリアント自身に追加します。両方が数値の場合、バリアントはその値を値ごとに増加させます。
次の例では、treenode.labelPropertiesを使用してオブジェクトのラベル値にアクセスしています。
double myVal = current.labelValue - 2;Variant.operator -=
| Variant operator -=( double value ) | 
パラメータ
| value | バリアントを減少させる値。 | 
説明
数値バリアントを定義した値で減少させます。
次の例では、treenode.labelPropertiesを使用してオブジェクトのラベル値を減少させています。
current.labelValue -= 2;Variant.operator ==
| int operator ==( int value ) | 
| int operator ==( double value ) | 
| int operator ==( string value ) | 
| int operator ==( treenode value ) | 
| int operator ==( Variant value ) | 
パラメータ
| value | 比較対象となる値。 | 
戻り値
| int | バリアントが値と等しい場合は真、それ以外は偽。 | 
説明
2つの値がお互いに等しいかテストします。
次の例では、treenode.labelPropertiesを使用してオブジェクトのラベル値を比較しています。
if (current.labelValue == 5) {
	...
}