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:

  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 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:

Copiar
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.

Copiar
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.

Copiar
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.

Copiar
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.

Copiar
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