While

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

構文 

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

引数 

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

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

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

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

戻り値のデータタイプ 

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

起点バージョン 

18.0

説明 

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

  1. 初期変数引数を評価します。
  2. 条件引数を評価します。
  3. 条件が次の場合:
    • 真 (0 以外の数値結果) の場合、ロジックを評価してから、2 番目のステップを繰り返します。
    • 偽 (0) の場合、ループを停止して結果を返します。

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

コピー
While ( 
    [初期変数 1 = 値 1 ; 初期変数 2 = 値 2 ; ...];  
    条件 ; 
    [ロジック変数 1 = 式 1 ; ロジック変数 2 = 式 2 ; ...];          
    result 
)

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

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

メモ 

  • 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 の有効範囲が変わらないためです。

例 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