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
.
- True (qualquer resultado numérico diferente de zero), avalia a
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
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 2
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 3
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”; // Definida no escopo de Let
it2 = 1; // Definida no escopo de Let
fora = "1.0 " & it1 & " " & it2 & ¶
];
While
(
[ // variáveisIniciais; define as linhas 2.0 e 3.0 do resultado
i = 0;
fora = fora & "2.0 " & it1 & " " & it2 & ¶;
it1 = "b"; // Definida no escopo de While
fora = fora & "3.0 " & it1 & " " & it2 & ¶
];
// Condição
i < 2;
[ // lógica; define as 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
fora & "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