While

조건이 참일 때 로직을 반복하고 결과를 반환합니다.

포맷 

While([ 이니셜 변수 ] ; 조건 ; [ 로직 ] ; 결과)

매개 변수 

이니셜 변수 - 아래 매개변수에서 사용할 수 있는 변수 정의.

조건 - 각각의 루프 반복 전에 평가된 부울 표현식. 참인 경우 루프가 반복됩니다. 거짓인 경우 루프가 중단됩니다.

로직 - 루프가 반복될 때마다 평가되는 변수 정의.

결과 - 루프가 중단되면 반환되는 표현식.

반환되는 데이터 유형 

텍스트, 숫자, 날짜, 시간, 타임스탬프, 컨테이너

다음 버전에서 시작됨 

18.0

설명 

While 함수는 다음 단계를 수행합니다.

  1. 이니셜 변수 매개변수를 평가합니다.
  2. 조건 매개변수를 평가합니다.
  3. 조건에 따른 동작:
    • 참(0이 아닌 숫자 결과)인 경우, 로직을 평가하고 2단계를 반복합니다.
    • 거짓(0)인 경우, 루프를 중단하고 결과를 반환합니다.

이니셜 변수로직 앞뒤에 괄호 [ ]를 추가하고 세미콜론으로 구분하여 여러 개의 변수 정의를 지정할 수 있습니다. 예를 들어 다음과 같습니다.

복사
While( 
    [ initVar1 = value1 ; initVar2 = value2 ; ...] ; 
    조건 ; 
    [ logicVar1 = expression1 ; logicVar2 = expression2 ; ...] ; 
    결과 
)

이니셜 변수로직 매개변수에서 지정된 변수는 왼쪽에서 오른쪽으로 평가됩니다. 이 변수는 동일한 범위 내에 있으며 조건결과 매개변수에서 사용할 수 있습니다. 변수 사용하기를 참조하십시오.

한 루프 반복의 정보를 다른 루프 반복까지 유지해야 하는 변수는 로직 매개변수에서 사용하기 전에 초기화해야 합니다. 그렇지 않으면 값이 삭제됩니다.

참고 

  • FileMaker 클라이언트의 응답 중단을 발생시킬 수 있는 무한 루프를 막기 위해, 루프 반복이 제한을 초과한 경우 이 함수는 "?"를 반환합니다. 제한을 설정하려면 SetRecursion 함수를 사용하십시오.

예제 1 

반복되는 변수 $a의 값을 모두 더합니다. 루프가 반복될 때마다 개수가 증가되고 개수를 사용하여 $a 변수 반복이 지정되며 해당 값은 총계에 추가됩니다. 이 예제에서는 150을 반환합니다.

복사
While( 
    [ 
        개수 = 0 ; 
        총계 = 0 ; 
        $a[1] = 25 ; 
        $a[2] = 50 ; 
        $a[3] = 75 
    ] ; 
    개수 < 3 ; 
    [
        개수 = 개수 + 1 ; 
        총계 = 총계 + $a[개수]
    ] ;
    총계
)

예제 2 

두 텍스트 값 사이에 다섯 개의 점을 추가합니다. While 함수에서 도시 함수 변수의 범위는 Let 함수의 범위와 다르기 때문에 이 예제는 샌프란시스코.....파리를 반환합니다.

복사
Let(
    도시 = "파리";
    While( 
        [ 도시 = "샌프란시스코"; i = 0 ] ; 
        i < 5 ;
        [
            i = i + 1 ;
            도시 = 도시 & "."
        ] ; 
        도시
    )
& 도시)

함수 변수 도시의 모든 인스턴스가 로컬 변수 $도시로 대치된 경우, $도시가 계산 전체에서 동일한 범위를 가지기 때문에 해당 예제는 샌프란시스코.....샌프란시스코.....를 반환합니다.

예제 3 

함수 변수의 범위가 While 앞에서 정의된 경우, While 루프의 이니셜 변수로직 매개변수에서 정의된 경우와 비교하여 어떻게 다른지 설명합니다.

While 루프 앞에서 정의된 it1it2의 값은 루프 내에서 사용 가능하지만, 루프내에서 it1it2의 변경사항은 루프 뒤에서 이 변수의 값에 영향을 주지 않습니다. 또한 이 예제는 이니셜 변수 매개변수에서 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