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