While
条件が真の間にロジックを繰り返してから、結果を返します。
構文
While ([初期変数] ; 条件 ; [ロジック] ; 結果)
引数
初期変数
- 以降の引数に使用できる変数の定義
条件
- 各ループの繰り返しの前に評価される論理式。真の間はループが繰り返されます。偽になるとループは停止します。
ロジック
- ループが繰り返されるごとに評価される変数の定義
結果
- ループが停止したときに返される式
戻り値のデータタイプ
テキスト、数字、日付、時刻、タイムスタンプ、オブジェクト
起点バージョン
18.0
説明
While 関数は次のステップを実行します:
-
初期変数
引数を評価します。 -
条件
引数を評価します。 -
条件
が次の場合:-
真 (0 以外の数値結果) の場合、
ロジック
を評価してから、2 番目のステップを繰り返します。 -
偽 (0) の場合、ループを停止して
結果
を返します。
-
初期変数
とロジック
の複数の変数定義は、角カッコ ([ ]) で囲み、セミコロンで区切ることで指定できます。例:
While (
[初期変数 1 = 値 1 ; 初期変数 2 = 値 2 ; ...] ;
条件 ;
[ロジック変数 1 = 式 1 ; ロジック変数 2 = 式 2 ; ...] ;
結果
)
初期変数
引数とロジック
引数で指定された変数は左から右に評価されます。これらの変数は同じ有効範囲内にあり、条件
引数と結果
引数で使用できます。変数の使用を参照してください。
ループの繰り返し間で情報を保持する必要がある変数はロジック
引数で使用する前に初期化する必要があります。それ以外の場合は値が削除されます。
メモ
-
FileMaker クライアントが応答しなくなるような無限ループを回避するために、この関数はループの繰り返しの回数が制限を超えた場合に「?」を返します。制限を設定するには、SetRecursion 関数を使用します。
例 1
5 を 3 乗した結果を返します。Let ステートメントは初期値
5 とべき乗
3 を確立します。計算は結果
の 5 * 5 * 5 = 125 に達するまで複数回ループします。
Let (
[
値 = 5 ;
べき乗 = 3
] ;
While (
[結果 = 値 ; i = 1] ;
i < べき乗 ;
[i = i + 1 ; 結果 = 結果 * 値] ;
結果
)
)
例 2
繰り返し変数 $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
)
例 3
2 つのテキスト値の間に 5 つのピリオドを追加します。While 関数内の City
関数変数の有効範囲は、Let のものとは異なるため、この例は 「サンフランシスコ.....パリ」を返します。
Let (
City = "パリ";
While (
[City = "サンフランシスコ"; i = 0] ;
i < 5 ;
[
i = i + 1 ;
City = City & "."
] ;
市区町村
)
& City )
関数変数 City
のすべてのインスタンスがローカル変数 $City
で置き換えられた場合、この関数は「サンフランシスコ.....サンフランシスコ.....」を返します。なぜなら、計算を通して $City
の有効範囲が変わらないためです。
例 4
関数変数が While ループの前に定義された場合と While ループの初期変数
引数とロジック
引数で定義された場合で、その有効範囲にどのような違いがあるかを示します。
While ループの前に定義された it1
と it2
の値はループ内で使用できますが、ループ内で it1
と it2
に行われた変更はループ後のそれらの変数の値に影響しません。この例は、ロジック
引数で定義された 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