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