リファレンス > 関数リファレンス > 論理関数 > While
 

While

条件が真の間にロジックを繰り返してから、結果を返します。

構文 

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

引数 

初期変数 - 以降の引数に使用できる変数の定義

条件 - 各ループの繰り返しの前に評価される論理。真の間はループが繰り返されます。偽になるとループは停止します。

ロジック - ループが繰り返されるごとに評価される変数の定義

結果 - ループが停止したときに返される式

戻り値のデータタイプ 

テキスト、数字、日付、時刻、タイムスタンプ、オブジェクト

起点 

FileMaker Pro 18.0 Advanced

説明 

While 関数は次のステップを実行します:

1. 初期変数引数を評価します。

2. 条件引数を評価します。

3. 条件が次の場合:

真 (0 以外の数値結果) の場合、ロジックを評価してから、2 番目のステップを繰り返します。

偽 (0) の場合、ループを停止して結果を返します。

初期変数ロジックの複数の変数定義は、角カッコ ([ ]) で囲み、セミコロンで区切ることで指定できます。次に例を示します:

While (
[初期変数 1 = 値 1 ; 初期変数 2 = 値 2 ; ...];
条件 ;
ロジック変数 1 = 式 1 ; ロジック変数 2 = 式 2 ; ...];
結果
)

初期変数引数とロジック引数で指定された変数は左から右に評価されます。これらの変数は同じ有効範囲内にあり、条件引数と結果引数で使用できます。変数の使用を参照してください。

ループの繰り返し間で情報を保持する必要がある変数はロジック引数で使用する前に初期化する必要があります。それ以外の場合は値が削除されます。

メモ 

FileMaker クライアントが応答しなくなるような無限ループを回避するために、この関数はループの繰り返し回数が制限を超えた場合に「?」を返します。制限を設定するには、SetRecursion 関数を使用します。

例 1 

繰り返し変数 $a 内の値を合計します。ループの繰り返しごとに count が 1 ずつ加算され、それが $a 変数の繰り返しを指定するために使用されてその値が実行中の total に加算されます。この例は「150」を返します。

While (
[
count = 0 ;
total = 0 ;
$a[1] = 25 ;
$a[2] = 50 ;
$a[3] = 75
] ;
count < 3 ;
[
count = count + 1 ;
total = total + $a[count]
] ;
total
)

例 2 

2 つのテキスト値の間に 5 つのピリオドを追加します。While 関数内の City 関数変数の有効範囲は、Let のものとは異なるため、この例は 「サンフランシスコ.....パリ」を返します。

Let (
City = "パリ" ;
While (
[City = "サンフランシスコ"; i = 0] ;
i < 5 ;
[
i = i + 1 ;
City = City & "."
] ;
City
)
& City)

関数変数 City のすべてのインスタンスが ローカル変数 $City で置き換えられた場合、この関数は「サンフランシスコ.....サンフランシスコ.....」を返します。なぜなら、計算を通して $City の有効範囲が変わらないためです。

例 3 

関数変数が While ループの前に定義された場合と While ループの初期変数引数とロジック引数で定義された場合で、その有効範囲にどのような違いがあるかを示します。

While ループの前に定義された it1it2 の値はループ内で使用できますが、ループ内で it1it2 に行われた変更はループ後のそれらの変数の値に影響しません。この例は、ロジック引数で定義された it2 変数の値 2 が各ループの繰り返し後に失われる様子も示します。これは、it2初期変数引数で初期化されないためです。

Let (
[// While ループ前。結果に限界 1.0 を設定
it1 = "a"; // Let の範囲内で定義
it2 = 1; // Let の範囲内で定義
out = "1.0 " & it1 & " " & it2 & ¶
] ;
While
(
[// 初期変数。結果に限界 2.0 および 3.0 を設定
i = 0;
out = out & "2.0 " & it1 & " " & it2 & ¶;
it1 = "b"; // While の範囲内で定義
out = out & "3.0 " & it1 & " " & it2 & ¶
] ;
// 条件
i < 2;
[// ロジック。結果に限界 4.x および 5.x を設定
  // 前のループ内でロジック引数に定義された変数を
  // ここで削除
i = i + 1;
out = out & "4."& i & " " & it1 & " " & it2 & ¶;
it1 = "c"; // While の範囲内で再利用
it2 = 2; // While の範囲内で再定義
out = out & "5."& i & " " & it1 & " " & it2 & ¶
] ;
// 結果。結果に限界 6.0 を設定
out & "6.0 " & it1 & " " & it2 & ¶
)
// While ループ後。結果に限界 7.0 を設定
& "7.0 " & it1 & " " & it2 & ¶
)

結果は次のようになります:

1.0 a 1
2.0 a 1
3.0 b 1
4.1 b 1
5.1 c 2
4.2 c 1
5.2 c 2
6.0 c 2
7.0 a 1

関連項目 

関数リファレンス (種類順)

関数リファレンス (名前順)

計算式について

関数について

計算フィールドの定義

計算式での演算子の使い方