妹、ForEachLoopWithBreakで、Breakしたのかしてないのか知りたい
妹「ForEachで、Breakした後かどうか調べる方法ないの?」
「ノード自体にそういう機能はなさそうだけど……それどういう状況でForEach使ってた?」
妹「どういう状況と言われても、ハシゴを登るやつを作ってるんだよ。別々のハシゴをまたいでもちゃんと動くように、他のハシゴを全部調べてたんだよ」
「ということは、条件に合うハシゴが見つかったらその時点でBreakして、見つからなかったら終了するけど、その違いがわからないということか」
妹「だいたいそんな感じ」
「言われてみるとブループリントの構造としては、Break用の出力ピンがあってもいいような気はするし、自分でそういうマクロ作ってもいいんだけど……一般的なプログラミング言語のForEachだとそういうのはないから、同じようになってるんだと思う」
妹「一般的にはどうやってるの?」
「ForEachで全部調べて、条件に合う物があるかどうか調べる場合は、まず見つかったかどうか調べる変数を作る。Boolean型で最初はFalseの状態。見つかったらその変数をTrueにしたあとBreakする。もしくはオブジェクトリファレンス型にして、見つかったらそれを代入してからBreakという場合もある」
妹「なるほど。最初からそういう仕組みを入れといてくれればよかったのに」
「1つでも見つかればそれでいいって場合はそうなんだけど、個数を調べたいとか、見つけた中で一番数字の大きいやつを調べるとか、使い方が色々あるからね」
妹「それでその変数はいつ設定したらいいの? 変数が初期化されるタイミングがよくわからないんだけど」
「いつ初期化されるかというと、元になるレベルかブリープリントのインスタンスが出来た時だと思うけど……この場合そのへんはあんまり気にせず、ForEachの直前でFalseをセットするのがいい」
妹「前なんだ。ForEachの後にリセットしておけば次使う時にも大丈夫なのかなと思ってたんだけど」
「前にやる方が安全で、サンプルとかもだいたいそうなってるはず。後始末を漏れ無く出来れば後でもいいんだろうけど、直前にFalseにSETしちゃえばそもそも気にしなくてよくなるわけだから」