【FlowScript講座】第12回 FlowScript 3までに追加されたノード


[管理者]
KHCmaster
今回もPPD関連のノードは扱いません。
多くの更新後に拡張されたノードの使い方について説明します。

・Scopeについて
現在ScopeはGlobalScope,ContextScope,Scopeの3種類があります。
範囲の広い順にGlobalScope,ContextScope,Scopeになっています。

GlobalScope:いかなるスクリプトからもアクセス可能
ContextScope:同じコンテキスト(同じ譜面内のスクリプト、同じMOD内のスクリプト)からアクセス可能
Scope:同じスクリプト内からのみアクセス可能

・HashSetについて
HashSetは既存のコレクションクラスと比べると以下のような性質があります。
「同じ要素を2回以上追加できないArrayList」
「キーのみのHashtable」
つまるところ集合を扱うクラスになります。内部の順序に関しては規定されないので注意してください。
集合を扱うクラスなので、和集合、積集合などの集合演算を行うことできます。

HashSet.fsmlはHashSetの動作を確認するサンプルです。
0,1,0とInt32の値を追加していますが、HashSetを列挙すると0,1のみになり
重複されている1は追加されていないことになっていることが確認できます。

・Arrayについて
ArrayListは動的に削除、追加を行うことができるコレクションクラスですが
Arrayは作成後には削除、追加を行うことができず初期化時のサイズを保ったままになります。
それ以外はArrayListと使い方は同じです。

Array.fsmlはArrayの動作を確認するサンプルです。
サイズを3としてArrayを作成します。
Array[0]に10、Array[1]に11を設定します。
その後にArrayの列挙を行いますが、nullの場合はエラーが出るので別途処理しています。
つまり、Array作成後に要素を設定しない場合はnull値が設定されていることが確認できます。

・Enumerableについて
Enumerableはenumerate + ableからなる語で列挙可能という意味になります。
Enumerableはインターフェースで大体のコレクションクラスがEnumerableとして処理できます。
Array、ArrayList、HashSet、HashtableがEnumerableとして扱うことのできるクラスになります。
列挙可能であればいいのでRepeat.ForeachのArrayListプロパティもEnumerableに変更されています。
Enumerable.*のノードの多くは実行タイプではなく遅延評価タイプなのでその結果を残す場合には
Enumerable.ToArray、Enumerable.ToArrayListなどを使ってコレクションにしておかないと
毎回使うたびに評価が発生しパフォーマンスに影響するので注意してください。

Enumerable_Aggregate.fsmlはEnumerable.Aggregateの動作を確認するサンプルです。
0が詰まったArrayに対して空文字をシードにAggregate(集めるの意)します。
""+0=>"0"
"0"+","+"0"=>"0,0"
...
"0,0,0,0,0"+","+"0"=>"0,0,0,0,0,0"
という連結を行っていることになります。

Enumerable_OrderBy.fsmlはEnumerable.OrderByの動作を確認するサンプルです。
1,3,5,4,2,0と詰まったArrayに対して
まずSelectが行われます。今回は特になにもせずInt32のままSelectResultにします。
その後に要素の比較が行われ、X-YをCompareResultにいれます。
すると昇順に並び替えられたEnumerableが取得できます。
X-YでなくY-Xを結果とすると降順になります。

Enumerable_Select.fsmlはEnumerable.Selectの動作を確認するサンプルです。
0,1,2,3,4,5と詰まったArrayに対して
+2したEnumerableを取得します。

Enumerable_Where.fsmlはEnumerable.Whereの動作を確認するサンプルです。
0,1,2,3,4,5と詰まったArrayに対して
2よりも大きい値のみのEnumerableを取得します。

Enumerable_WhereAndSelect.fsml、Enumerable_WhereAndSelect.fsmlは
Enumerable.SelectとEnumerable.Whereの複合動作を確認するサンプルです。
繋ぐ順序に応じて結果が変わることに注意してください。

今回の講座に関する質問はこのスレッドで受け付けています。
次回からPPD編です。(たぶん)
作成日時:2014-04-20 02:22:46 更新日時:2014-04-20 02:26:13
FlowScript講座をフォーラムを使って開講中です。