Referência > Referência de funções > Funções lógicas > While
 

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

Originado em 

FileMaker Pro 18.0 Advanced

Descrição 

A função While executa as seguintes etapas:

1. Avalia o parâmetro variávelInicial.

2. Avalia o parâmetro condição.

3. 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 o 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 ; ...] ;
resultado
)

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 

Totaliza os 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;
fora = fora & "4." & i & " " & it1 & " " & it2 & ¶;
it1 = "c"; // Reutilizada no escopo de While
it2 = 2; // Redefinida no escopo de While
fora = fora & "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

Tópicos relacionados 

Referência de funções (lista de categorias)

Referência de funções (lista em ordem alfabética)

Sobre fórmulas

Sobre funções

Definição de campos de cálculo

Utilização de operadores em fórmulas