While
Repete a lógica enquanto a condição for verdadeira e retorna o resultado.
Formato
While ( [ variávelInicial ] ; condição ; [ lógica ] ; resultado )
Parâmetros
variávelInicial
- definições da variável que estarão disponíveis para uso nos parâmetros seguintes.
condição
- uma expressão booleana avaliada antes de cada iteração de loop. Enquanto True, o loop repete. Quando False, o loop para.
lógica
- definições da variável que são avaliadas cada vez que o loop é repetido.
resultado
- uma expressão que é retornada quando o loop para.
Tipo de dados retornado
texto, número, data, hora, carimbo de data/hora, container
Originada na versão
18.0
Descrição
A função While executa as seguintes etapas:
-
Avalia o parâmetro
variávelInicial
. -
Avalia o parâmetro
condição
. -
Se
condição
for:-
True (qualquer resultado numérico diferente de zero), avalia a
lógica
e repete a etapa 2. -
False (0) para o loop e retorna
resultado
.
-
Você pode especificar várias definições de variável para variávelInicial
e lógica
colocando-as entre colchetes [ ] e separando-as com um ponto e vírgula. Por exemplo:
While (
[ varInicial1 = valor1 ; varInicial2 = valor2 ; ...] ;
condição ;
[ varLógica1 = expressão1 ; varLógica2 = expressão2 ; ...] ;
result
)
As variáveis especificadas nos parâmetros variávelInicial
e lógica
são avaliadas da esquerda para a direita. Essas variáveis estão no mesmo escopo e podem ser usadas nos parâmetros condição
e resultado
. Consulte Utilização de variáveis.
As variáveis que precisam manter informações de uma iteração de loop para outra precisam ser inicializadas antes de serem usadas no parâmetro lógica
. Caso contrário, seus valores serão excluídos.
Notas
-
Para evitar loops infinitos que fariam com que os clientes do FileMaker parassem de responder, esta função retorna "?" quando o número de iterações de loop excede um limite. Para definir o limite, use a Função SetRecursion.
Exemplo 1
Retorna o resultado de 5 à potência de 3. A instrução Let estabelece o valor
inicial de 5 e potência
de 3. O cálculo é feito várias vezes até que o resultado
5 * 5 * 5 = 125 seja atingido.
Let (
[
value = 5 ;
power = 3
] ;
While (
[ result = value ; i = 1 ] ;
i < power ;
[ i = i + 1 ; result = result * value ] ;
result
)
)
Exemplo 2
O total dos valores na variável de repetição $a
. Cada iteração de loop aumenta o parâmetro count
, usa-o para especificar a repetição da variável $a
e adiciona o valor ao total
em execução. Este exemplo retorna 150.
While (
[
contagem = 0 ;
total = 0 ;
$a[1] = 25 ;
$a[2] = 50 ;
$a[3] = 75
] ;
contagem < 3 ;
[
contagem = contagem + 1 ;
total = total + $a[contagem]
] ;
total
)
Exemplo 3
Adiciona cinco pontos entre dois valores de texto. O escopo da variável de função Cidade
na função While é separado do escopo de Let, então este exemplo retorna São Francisco.....Paris.
Let (
Cidade = "Paris";
While (
[ Cidade = "São Francisco"; i = 0 ] ;
i < 5 ;
[
i = i + 1 ;
Cidade = Cidade & "."
] ;
Cidade
)
& Cidade )
Se cada instância da variável de função Cidade
fosse substituída pela variável local $City,
o exemplo retornaria São Francisco.....São Francisco....., porque $City
tem o mesmo escopo durante todo o cálculo.
Exemplo 4
Ilustra como o escopo das variáveis de função diferem quando elas são definidas antes de um loop While e quando elas são definidas nos parâmetros variávelInicial
e lógica
do loop While.
Os valores de it1
e it2
definidos antes do loop While estão disponíveis no loop, mas as alterações feitas em it1
e it2
no loop não afetam os valores dessas variáveis depois do loop. Este exemplo também mostra como o valor 2 da variável it2
definido no parâmetro lógica
é perdido após cada iteração de loop, porque a variável it2
não é inicializada no parâmetro variávelInicial
.
Let (
[ // Antes do loop While; define a linha 1.0 do resultado
it1 = "a"; // Definido no escopo de Let
it2 = 1; // Definido no escopo de Let
out = "1.0 " & it1 & " " & it2 & ¶
];
While
(
[ // initialVariables; define linhas 2.0 e 3.0 do resultado
i = 0;
out = out & "2.0 " & it1 & " " & it2 & ¶;
it1 = "b"; // Definido no escopo de While
out = out & "3.0 " & it1 & " " & it2 & ¶
];
// Condição
i < 2;
[ // lógica; define linhas 4.x e 5.x do resultado
// Variáveis definidas no parâmetro lógica em passagens anteriores
// no loop são excluídas neste ponto
i = i + 1;
out = out & "4." & i & " " & it1 & " " & it2 & ¶;
it1 = "c"; // Reutilizada no escopo de While
it2 = 2; // Redefinida no escopo de While
out = out & "5." & i & " " & it1 & " " & it2 & ¶
];
// resultado; define a linha 6.0 do resultado
out & "6.0 " & it1 & " " & it2 & ¶
)
// Depois do loop While; define a linha 7.0 do resultado
& "7.0 " & it1 & " " & it2 & ¶
)
O resultado é:
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