FileMaker Pro 18 Advanced の新機能【再帰計算できる「While」関数の変数について】

2019年07月16日 10:00 AM

FileMaker 18


前回は、「While」関数の具体的な使用例を紹介しました。

前回の「While」関数のブログ: FileMaker Pro 18 Advanced の新機能【再帰計算できる「While」関数の便利な使い方】

 

 

今回は、「While」関数を使用する際に気をつけたい変数について、少し触れたいと思います。

 

 

 □■ 「While」関数 の変数  ■□

まず、「While」関数の構文を復習してみます。

 

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

 

 

上記、引数の 角括弧[]で囲んでいる [ 初期変数 ] と [ ロジック ] は、計算で必要な変数を必要な分書くことができます。

下記の例を見てみましょう。


[ 初期変数 ] の箇所には、「~cnt」という変数と、「~result」という変数を定義しています。

[ ロジック ] の箇所には、その変数を使用して、それぞれの変数に値を再設定しています。

 

そして、計算結果として、「~result」に入っている値を戻り値としていますので、

“12345678910” という値が返ってきます。

 

 

 

 

では、

[ 初期変数 ] の箇所の、「~result」という変数を定義せずに、[ ロジック ] の箇所のみで定義したら、どうなるでしょうか?

 

 

エラーが返ってきます。

———-

//ロジック

~cnt = ~cnt + 1;

~result = ~result & ~cnt

———-

 

[ 初期変数 ]で、「~result」変数がないので、赤字の部分が見つからないと言っているんですね。

 

 

 

では、計算で使用したい変数は、[ 初期変数 ]ですべて定義しておかないといけないのでしょうか?

 

前回の 「While」関数の便利な使い方 で紹介した計算式を再度見てみます。

 

[
{
“code”: “0001”,
“kana”: “ミズホ”,
“name”: “みずほ”,
“url”: “https://bank.teraren.com/banks/0001.json”,
“branches_url”: “https://bank.teraren.com/banks/0001/branches.json”
},
{
“code”: “0005”,
“kana”: “ミツビシトウキヨウUFJ”,
“name”: “三菱東京UFJ”,
“url”: “https://bank.teraren.com/banks/0005.json”,
“branches_url”: “https://bank.teraren.com/banks/0005/branches.json”
}
]

 

上記のような、JSONデータから、

みずほ

三菱東京UFJ

 

という名前をリストにする計算式です。

 

 

黄色で、塗った箇所に、「~name」という変数が定義されています。

初期変数では定義していませんが、エラーは返ってきていません。

変数を定義する計算式で、使用していないからなのですが、

つまり、再帰計算させるループ間で、情報を保持しておく場合には、[ 初期変数 ]で、変数を定義しておかないといけないわけです。

 

上記、「~name」という変数は、一回の計算で使用するだけで、その値は次の計算時には、必要ないものです。

ですので、ロジックにだけあればいいものとなります。

もちろん計算式の書き方の問題なので、「~name」という変数を書かず、「~result」変数の計算で、参照している「~name」変数部分を、

計算式にしてしまえば、「~name」変数はいらないのですが、上記の例では、計算式の視認性を良くするために、このような書き方をしています。

 

変数にする基準としては、視認性だけではなく、同じ計算式が、何回も出てくる場合、その部分を変数にしておくと、視認性だけではなく、

パフォーマンスも良くなるので、その点も考慮しましょう。

 

 

 

 □■ 「While」関数 で、グローバル変数の定義  ■□

 

「While」関数の変数で、$, $$をつけると、ローカル変数、グローバル変数が定義できます。

 

例えば、

While (

[

//初期変数

$$TEST = “TEST”

] ;

//条件 “”;

[

//ロジック

];

//結果

“”

)

 

上記のように[ 初期変数 ]でグローバル変数を定義すれば、

グローバル変数が定義されます。

 

 

では、下記のように

[ ロジック ] で、グローバル変数を書いたらどうなるでしょうか?

 

While (

[

//初期変数

~cnt = 0

] ;

//条件

~cnt < 1;

[

//ロジック

~cnt = ~cnt + 1;

$$TEST = “TEST”

];

//結果

~cnt

)

 

 

同じく定義することができました。

「While」関数で、ローカル変数、グローバル変数が定義できるのは、

変数を定義できる[ 初期変数 ][ ロジック ] の箇所、どちらでもできました。

 

 

 

 □■ 「While」関数 で、変数の接頭辞  ■□

 

ローカル変数は、”$”を変数につけます。

グローバル変数は、”$$”を変数につけます。

関数の変数には、特に決められた接頭辞はありません。

 

私は、現在 FileMaker のカスタムApp開発者の多くが使うチルダ記号( ~ )を使っています。

計算式内の変数なのか、データベースのフィールド名なのかなど、すぐに判断がつくからです。

 

また、下記のような場合、

 

フィールドA(数字)には、100が入力されていて、

フィールドB(計算)の計算で、 「フィールドA」という変数に、200が設定されています。

フィールドBの結果は、200となっていますので、結果に書かれているフィールドAは、「フィールドA」変数となります。

変数のほうが優先されるようです。

ですが、とてもややこしいですね。

 

関数内の変数には、フィールド名では使わない何かしらの接頭辞を設定して、

計算式を書くことを推奨します。

 

いかがでしたでしょうか?

「While」関数を使用して、面倒だった処理が、計算式で簡単に処理できるケースが、たくさんありますので、

仕様を把握して、活用していきましょう。