top of page
  • TK

繰り返し関数 [While] 登場!


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関数の実用例を見ながら、その効果を探ってみたいと思います!


閲覧数:5,426回0件のコメント

Comments


bottom of page