While
조건이 참일 때 로직을 반복하고 결과를 반환합니다.
포맷
While([ 이니셜 변수 ] ; 조건 ; [ 로직 ] ; 결과)
매개 변수
이니셜 변수 - 아래 매개변수에서 사용할 수 있는 변수 정의.
조건 - 각각의 루프 반복 전에 평가된 부울 표현식. 참인 경우 루프가 반복됩니다. 거짓인 경우 루프가 중단됩니다.
로직 - 루프가 반복될 때마다 평가되는 변수 정의.
결과 - 루프가 중단되면 반환되는 표현식.
반환되는 데이터 유형
텍스트, 숫자, 날짜, 시간, 타임스탬프, 컨테이너
다음 버전에서 시작됨
18.0
설명
While 함수는 다음 단계를 수행합니다.
- 
                                                이니셜 변수매개변수를 평가합니다.
- 
                                                조건매개변수를 평가합니다.
- 
                                                조건에 따른 동작:- 
                                                        참(0이 아닌 숫자 결과)인 경우, 로직을 평가하고 2단계를 반복합니다.
- 
                                                        거짓(0)인 경우, 루프를 중단하고 결과를 반환합니다.
 
- 
                                                        
이니셜 변수 및 로직 앞뒤에 괄호 [ ]를 추가하고 세미콜론으로 구분하여 여러 개의 변수 정의를 지정할 수 있습니다. 예를 들어 다음과 같습니다.
While ( 
    [ initVar1 = value1 ; initVar2 = value2 ; ...] ; 
    조건 ; 
    [ logicVar1 = expression1 ; logicVar2 = expression2 ; ...] ; 
    결과 
)이니셜 변수 및 로직 매개변수에서 지정된 변수는 왼쪽에서 오른쪽으로 평가됩니다. 이 변수는 동일한 범위 내에 있으며 조건 및 결과 매개변수에서 사용할 수 있습니다. 변수 사용하기를 참조하십시오.
한 루프 반복의 정보를 다른 루프 반복까지 유지해야 하는 변수는 로직 매개변수에서 사용하기 전에 초기화해야 합니다. 그렇지 않으면 값이 삭제됩니다.
참고
- 
                                                FileMaker 클라이언트의 응답 중단을 발생시킬 수 있는 무한 루프를 막기 위해, 루프 반복이 제한을 초과한 경우 이 함수는 "?"를 반환합니다. 제한을 설정하려면 SetRecursion 함수를 사용하십시오. 
예제 1
5의 세제곱의 결과를 반환합니다. Let 문은 초기 값을 5로, 거듭제곱을 3으로 설정합니다. 계산은 결과 5 * 5 * 5 = 125가 달성될 때까지 여러 번 반복됩니다.
Let ( 
    [
        값 = 5 ;
        거듭제곱 = 3
    ] ;
    While ( 
        [ 결과 = 값 ; i = 1 ] ;
        i < 거듭제곱 ;
        [ i = i + 1 ; 결과 = 결과 * 값 ] ;
        결과
    )
)예제 2
반복되는 변수 $a의 값을 모두 더합니다. 루프가 반복될 때마다 개수가 증가되고 개수를 사용하여 $a 변수 반복이 지정되며 해당 값은 총계에 추가됩니다. 이 예제에서는 150을 반환합니다.
While ( 
    [ 
        개수 = 0 ; 
        총계 = 0 ; 
        $a[1] = 25 ; 
        $a[2] = 50 ; 
        $a[3] = 75 
    ] ; 
    개수 < 3 ; 
    [
        개수 = 개수 + 1 ; 
        총계 = 총계 + $a[개수]
    ] ;
    총계
)예제 3
두 텍스트 값 사이에 다섯 개의 점을 추가합니다. While 함수에서 도시 함수 변수의 범위는 Let 함수의 범위와 다르기 때문에 이 예제는 샌프란시스코.....파리를 반환합니다.
Let ( 
    도시 = "파리";
    While ( 
        [ 도시 = "샌프란시스코"; i = 0 ] ; 
        i < 5 ;
        [
            i = i + 1 ;
            도시 = 도시 & "."
        ] ; 
        도시
    )
& 도시 )함수 변수 도시의 모든 인스턴스가 로컬 변수 $도시로 대치된 경우, $도시가 계산 전체에서 동일한 범위를 가지기 때문에 해당 예제는 샌프란시스코.....샌프란시스코.....를 반환합니다.
예제 4
함수 변수의 범위가 While 앞에서 정의된 경우, While 루프의 이니셜 변수 및 로직 매개변수에서 정의된 경우와 비교하여 어떻게 다른지 설명합니다.
While 루프 앞에서 정의된 it1 및 it2의 값은 루프 내에서 사용 가능하지만, 루프 내에서 it1 및 it2의 변경사항은 루프 뒤에서 이 변수의 값에 영향을 주지 않습니다. 또한 이 예제는 이니셜 변수 매개변수에서 it2를 초기화하지 않은 경우, 각 루프가 반복된 후에 로직 매개변수에서 정의된 it2 변수의 값 2가 어떻게 유실되는지 보여줍니다.
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