今回はFlowScriptの細かい動作について説明します。再確認の部分もあります。
まずこのスクリプトをご覧ください。
このスクリプトを実行すると「あ」か「い」どっちが先に表示されるでしょうか?
正解
↓
どちらかが先に表示されます。
FlowScriptではイベントから複数のフローを出した場合それらの実行順序は不定になります。
正確には一意に決まるのですが、書き方としてどれかを先にということはできないので、
順序を明確に決める際には、Logic.Sequentialを使うようにしましょう。
(反転してね)
-----------------------------------------------------------------------------------------------------------------
今まで様々なデータ型を説明してきましたが、それぞれに色がついていることに気がついていますか?
画像の通り、Valueの左右にある矢印にはそれぞれ色がついていて、それらはデータ型ごとに固定されています。
(Valueの上にマウスを乗せると[Int32]のようにデータの型がでてきます。)
フローを作成する場合に繋ぐことのできるデータ型のプロパティには☆マークがくるくる回るようになっていますが、
どのデータならつなげるのかという一覧を書いておきます。
Boolean->String
Double->String
Float->String
Int32->String
Int32->Float
Int32->Double
Float->Double
-------------------
(Object->*)
(*->Object)
*はいかなる型を意味します。
Object型はいかなる繋ぎ方も許容しますが、実際にスクリプトを実行するとエラーが起こることがあります。
たとえば、Scopeを使いHogeという変数にDoubleの型を設定しておき、
取得して
Int32.Multiplyなどにつないだスクリプトは実行時にエラーがでます。
Objectへの接続はデータが変換されるわけではなく、適当な箱に入れられてデータ型は保持されます。
ですので、実際にObject型を繋ぐ場合はその中身のデータ型が繋ぐ先のデータ型と同じか、
変換されるデータ型かのどちらかであるひつようがあります。
Object型の中身の型が実際にある特定の型かどうかを調べるには各タイプのIsTypeノードを使用することで行えます。
(参考)
http://projectdxxx.me/forum/thread/id/38
-----------------------------------------------------------------------------------------------------------------
またクイズです。
このスクリプトは何を出力するでしょうか?
正解
↓
Int32.ValueのValueプロパティになにも設定されていない…
んー…あっ、さっきと同じで「不定」だ!!
違います。
FlowScriptでは全ての型に初期化値が存在し、何も設定されない場合は初期化値が使用されます。
Int32の初期化値:0
Floatの初期化値:0
Doubleの初期化値:0
Booleanの初期化値:False
String,ArrayList,Hashtable,Objectの初期化値:null
となっています。
従って正解は「0」です。
覚えておくと無駄な設定をしなくても済むので速くスクリプトを書けるようになるでしょう。
(反転してね)
今回の講座に関する質問はこのスレッドで受け付けています。
次回からPPD編です。次回は更新されて追加された内容についてです。