FileMaker Pro 18 Advanced の新機能 【「While」関数・「SetRecursion」関数】

2019年06月07日 10:00 AM

FileMaker 18


 

やっと出た!
・再帰計算できる「While」関数
・繰り返し数を設定できる「SetRecursion」関数

 

新しいバージョンがリリースされましたが、その中でもこの関数は今までなかったのが不思議なくらいの関数なので、紹介したいと思います!

 

V18で追加された関数

 

  • While ( [ 初期変数 ] ; 条件 ; [ ロジック ] ; 結果 )
  • SetRecursion ( 式 ; 最大繰り返し )

 

 

 

 

 □■「While」関数 ■□

 

「While」関数です。
名前からして、おそらく想像できる方も多くいらっしゃるかもしれませんね。他の開発環境では、よく見られる構文です。

再帰計算を実行してくれる関数です。

JavaScriptを例にしてみますと、

処理 結果
// JavaScriptで書いた場合

var cnt = 0
while(cnt<10){
cnt++;//変数cntに1を足す
}

10

 

これは、”cnt”という変数に、1を足す計算を10回繰り返すという計算です。

 

いままで、FileMakerでは、このような繰り返しの計算をする場合、FileMaker のカスタム関数を定義して、カスタム関数の計算式内で、そのカスタム関数を呼び出すことで再帰計算をさせるか、スクリプトで、ループさせて計算を繰り返すかとなっていました。
しかし、今回新しく追加された While 関数を使用することで、カスタム関数の再帰計算を書くよりも簡単に定義することができるようになりました。

 

では、FileMaker で書くとどうなるでしょうか?
まず、構文から見てみます。

 

While ( [ 初期変数 ] ; 条件 ; [ ロジック ] ; 結果 )

 

引数 内容 (FileMaker ヘルプより引用)
初期変数 以降の引数に使用できる変数の定義
条件 各ループの繰り返しの前に評価される論理式。真の間はループが繰り返されます。偽になるとループは停止します。
ロジック ループが繰り返されるごとに評価される変数の定義
結果 ループが停止したときに返される式

 

ポイントは、“条件”の部分ですね。
ここは、繰り返す条件を書くのですが、条件が True であれば、ロジックの計算を繰り返し、 False になると、結果の計算を評価します。

 

先程の 「”cnt”という変数に、1を足す計算を10回繰り返すという計算」 を、FileMaker の”While”で書くとどうなるかという答えは、下記です。

 

 

処理 結果
// FileMaker「While」で、1を足す計算を10回繰り返す計算

While (
[
//初期変数
~cnt = 0

] ;
//条件
~cnt < 10;

[
//ロジック
~cnt = ~cnt + 1

];
//結果
~cnt

)

// 結果(FileMakerのWhile)

10

 

 

ちなみに、繰り返しの回数は、どのくらいまで設定できるかというと、デフォルトで50,000回となり、

それを超える繰り返しになると、結果は "?" が返ってきます。 


 

 

 

□■「SetRecursion」関数 ■□

 

では、次に SetRecursion という関数を見てみたいと思います。
この関数は、While 関数と組み合わせて使うように想定されていると思います。
では、どのような関数なのでしょうか?

 

ヘルプを見てみるとこのように書いてありました。

 

// FileMakerのヘルプから引用

SetRecursion
式内部の再帰とループの最大繰り返し数を設定します。

構文
SetRecursion (式 ; 最大繰り返し)

 

 

While 関数では、デフォルトの繰り返し回数は、上限50,000回となっていますので、それを超える繰り返しを設定したい場合に、 SetRecursion 関数が必要になります。

 

処理 結果
// FileMaker「While」で、1を足す計算を50,001回繰り返す計算

While (
[
//初期変数
~cnt = 0

] ;
//条件
~cnt < 50001;

[
//ロジック
~cnt = ~cnt + 1

];
//結果
~cnt

)

// 50000回を超える繰り返し計算の結果

?

 

デフォルトの繰り返し回数は、上限50,000回ですので、その回数を超える場合は、“?”が返ってきます。

 

では、下記のように設定してみましょう。

 

 

処理 結果
// FileMaker「While」で、1を足す計算を50,001回繰り返す計算で、
//「SetRecursion」で、上限を60,000回を指定した計算SetRecursion (While (
[
//初期変数
~cnt = 0] ;
//条件
~cnt < 50001;[
//ロジック
~cnt = ~cnt + 1];
//結果
~cnt)//While; 60000
)//SetRecursion
// 結果

50001

 

となります。

 

しかし、一つ注意点があります。 While関数の「条件」で指定する繰り返し回数よりも少ない数を、SetRecursion 関数で指定した場合、正しく計算されず結果は”?”が返ってきます。

 

上記のように、50001回繰り返す条件を指定しておきながら、SetRecursion 関数で、100回で繰り返しをやめさせて、100という結果が返るような計算は書けないということですね。

実際に、While関数を使用する場合は、繰り返す条件が可変の場合がほとんどで、想定できる繰り返しの上限が50000回を超える場合などにこの関数を使用して、開発者が繰り返しの上限をコントロールするという用途で使用できます。

 

いかがでしたでしょうか。 次回は、もう少し具体的な While関数 の活用方法を紹介したいと思います。

 

【再帰計算できる「While」関数の便利な使い方】はこちら→