FileMaker18で追加された注目の関数
【While】
FileMaker経験者としては聞き慣れない単語で、ちょっと?な関数ですが
計算式の中でLoopが使えます!
と言えば少しイメージしやすいですね。
「 Loopはスクリプトでもできるじゃない!」な、あなた!
確かに繰り返しと言えばスクリプトステップのLoopですが、
【While】は "計算式の中"でLoopができるのですから、
使い方もシチュエーションも変わってきます。
実用編はまた次回として、
今回はこの【While】関数の仕組みを確認してみましょう。
While関数の構成要素
1+2+3+...9+10=55
よくある、、 上の結果を求める式で、While関数の書き方を確認します。
While ( [ 初期変数 ] ; 繰り返し条件 ; [ 繰り返すロジック ] ; 結果 )
上が基本形。
各構成要素は以下の通り。
>初期変数
While()内で使える変数です。
この変数を宣言しないと、下の条件や繰り返しロジックでエラーになります。
>繰り返し条件
この条件がTrueの時、Loopして繰り返しロジックを実行します。
Falseの時は、Loop処理を実行せず、結果を返します。
条件に一致する場合のみLoopが開始されるという点が、
スクリプトステップのLoopと感覚が違うところです。
>繰り返すロジック
条件がTrueの場合に実行します。
>結果
最終的な結果が出ます。
注意)もし初期変数を宣言し忘れるとエラーになります。
スクリプトステップのLoopであれば、下記のように初期変数を宣言しなくても、
繰り返しのロジック内で再定義できたのですが、
While関数内ではこれはNG!
無限ループが心配
Loopと聞くと、誰もが一度は失敗する無限Loop。
関数内でのLoopミスは、デバッカーで止めることもできませんので、
かなりナーバスな問題ですね。
なにか対策はないか調べてみました。
▼まずはWhile関数Loop限界数を調査...
どうやら、カスタム関数の再起限界数と同じく50,000回がLoop制限のようです。
限界値をコントロールする【SetRecursion】関数
「50,000回も無駄にLoopするなんて多すぎて怖い!もっと前にLoopを止めたい!」
「50,000回以上の処理をしたいのに限界があるなんて困る!」
どちらの意見も最で、
シチュエーションによっては、この限界数をコントロールしたくなります。
そこで登場したのが【SetRecursion】関数。
SetRecursion(式;最大繰り返し数)
簡単に言うと、Loop限界数を決めることができます。
これもWhile関数と合わせてFileMaker18より実装されました。
▼限界を超える
▼限界を抑える(無限Loop対策)
今回のまとめ
今回はWhile関数の特長である関数内Loopを、簡単なサンプル(式)で確認してみました。
Let関数+Loopスクリプト のような書き方で、変数と処理を頭の中でグルグル〜っと考える感じは、プログラマ感が出ますね^^;
カスタム関数で再起呼び出しを作ったことがある方は、すぐに使いこなせるのではないでしょうか?SetRecursion関数で限界を超えられるのもうれしいですね。
初めての方は、最初?(エラー)がよく出ますので、データビューアで計算式をテストして実装すると安心です。システムにかかる負荷もデータビューアの結果表示速度やビューア表示する時の"もたつき"でなんとなく把握できるかと思います。
「実用的にはどんな時に使えるの??」というのが気になりますよね。
次回はWhile関数の実用例を見ながら、その効果を探ってみたいと思います!
Comments