式の暗黙的な型変換


暗黙的キャストまたは暗黙的型変換は、Architect が 1 つのデータ型の明示的キャストを取って、結果の値のタイプを別のデータ型に変換する動作です。 Architectは、有効な式テキストの結果値のタイプの暗黙的な変換を実行します。暗黙的キャストは、タイプ階層またはタイプ表現の特定機能を利用します。Architect は、1 つのタイプの式がそのタイプを受け入れない特定の変数の文脈で使用された場合に暗黙的変換を行います。

Architect では、フロー作成者は「類似」タイプの値しか割り当てできません。文字列変数は文字列値のみ割り当てできます。ただし、Architect のパーサーは各式のデータ型を評価して、可能なら暗黙的キャストを使ってフロー作成者のために結果を調整します。


次の例では、フロー作成者は整数値を文字列で表現します。ランタイムに式の結果は文字列「5」となります。

ToString(5)

これは、式の作成者が ToString 関数呼び出しを追加して整数で渡すことで整数値を文字列の 5 に変換する明示的キャストの例です。 この式をランタイムに評価した結果値は「5」です。

フロー作成者はまた以下の有効な文字列式を入力できます:

ToString(3+4)

この式は明示的キャストと見なされます。フロー作成者はパーサーに整数を文字列に変換させます。暗黙的キャストは入力された式テキストの結果タイプに対してのみ実行されます。

フロー作成者はまた以下の有効な文字列式も入力できます:

3+4

「類似」タイプに関しては、この式は整数を文字列に割り当てようとしますが、文字列変数は文字列割り当てのみが可能であるため、この式は無効です。ただし、暗黙的キャストでは、Architect はこの式を解決できます。パーサーが ToString 値を式の周りに追加し、これによって整数が文字列に変換され、次の式が返されます:

ToString(3+4)

Architect が暗黙的キャストを実行すると、式の [式を変更] ダイアログ ボックスに変換の詳細を含むメッセージが返されます。

メモ:これらの変換メッセージは [式を編集] ダイアログ ボックスにのみ表示されます。これらはフィールド レベルのリテラルや式モードでは表示されません。ただし、Architect はフィールド レベルで入力されたか [式を編集] ダイアログ ボックスで入力されたかにかかわらず式を変換します。

暗黙的キャストは 1 つのパラメーターを取るタイプ キャスト関数に対してのみ実行されます。暗黙的キャスト変換では最初のパラメーター以降のパラメーターのアクションは処理できないため、複数のパラメーターを持つタイプ キャスト関数はこの変換の候補としては適していません。


前の例では、結果は整数値 7 であることがわかっています。 次に、デザイン時に値が何であるかわからないような例を考えてみましょう。

Flow.MyInteger + 5

この例では、Flow.MyInteger は整数データ型です。概念上は、結果値は「Flow.MyInteger の値に 5 の値を加算したもの」であることがわかっています。 Flow.MyInteger の値は何かはわかっていませんが、それはある整数値に別の整数値を加算したもので、結果が整数値であることはわかっています。 これは暗黙的キャストでは重要です:整数 + 整数 = 整数で、結果のタイプは文字列です。

パーサーが式を評価するとき、結果タイプは文字列ではなく式テキストの結果は整数であると解釈します。このため、ToString を暗黙的キャストとして加算し、結果を文字列に変換します。これは望まれた結果です。

前の例と同様に、Architect が暗黙的キャストを実行すると、式の [式を変更] ダイアログ ボックスに変換の詳細を含むメッセージが返されます。これらの変換メッセージは [式を編集] ダイアログ ボックスにのみ表示されます。これらはフィールド レベルのリテラルや式モードでは表示されません。ただし、Architect はフィールド レベルで入力されたか [式を編集] ダイアログ ボックスで入力されたかにかかわらず式を変換します。


結果が有効な式であれば、パーサーは暗黙的キャストを実行します。結果が無効な例を見てみましょう。 ご存知のように、Architect の初期リリースでは米国英語 (en-US)、カナダ フランス語 (fr-CA)、米国スペイン語 (es-US) の 3 つの言語でのみランタイム データの再生がサポートされています。したがって、フローが en-US、fr-CA、または es-US で実行される場合には、次の式は有効です。

ToAudioNumber(5005)

Architect はこれら 3 つの言語のいずれでも数字 5005 を表示できます。フロー作成者が、ランタイム データ再生サポートを持つ上記の 3 つの言語の 1 つでないオランダ語(オランダ)(nl-NL) をサポート言語として追加したらどうなるでしょうか。以下の例では、Architect が無効な式をどのように取り扱うかを示します。

フロー作成者が整数を入力し始めると、Architect はすぐにエラー メッセージを返します:

ImplicitCast1

フロー作成者が ToAudioNumber 関数を明示的キャストとして追加しても、Architect はエラーを返します:

ImplicitCast2