While

Repite la lógica mientras la condición es verdadera (true); a continuación, devuelve el resultado.

Formato 

While ( [ variableInicial ] ; condición ; [ lógica ] ; resultado )

Parámetros 

variableInicial: definiciones de variable que estarán disponibles para usarse en los parámetros siguientes.

condición: una expresión booleana evaluada antes de cada reiteración de bucle. Si While True, el bucle se repite. Cuando es False, el bucle se detiene.

lógica: definiciones de variable que se evalúan cada vez que se repite el bucle.

resultado: una expresión que se devuelve cuando el bucle para.

Tipo de datos devuelto 

texto, número, fecha, hora, fecha y hora, contenedor

Se origina en 

18.0

Descripción 

La función While realiza los siguientes pasos:

  1. Evalúa el parámetro de variableInicial.

  2. Evalúa el parámetro de condición.

  3. Si la condición es:

    • True (cualquier resultado numérico distinto de cero), evalúa lógica, luego repite el paso 2.

    • False (0), detiene el bucle y devuelve resultado.

Puede especificar varias definiciones de variable para la variableInicial y la lógica encerrándolas entre corchetes [ ] y separando cada uno con punto y coma. Por ejemplo:

Copiar
While ( 
    [ initVar1 = value1 ; initVar2 = value2 ; ...] ; 
    condition ; 
    [ logicVar1 = expression1 ; logicVar2 = expression2 ; ...] ; 
    result 
)

Las variables especificadas en los parámetros de variableInicial y lógica se evalúan de izquierda a derecha. Estas variables están dentro del mismo ámbito y se pueden utilizar en los parámetros condition y result. Consulte Usar variables.

Las variables que necesitan conservar información de una reiteración de bucle a la siguiente deben iniciarse antes de que se usen en el parámetro lógica. De lo contrario, sus valores se eliminan.

Notas 

  • Para prevenir bucles infinitos que puedan causar que los clientes de FileMaker dejen de responder, esta función devuelve "?" cuando el número de reiteraciones de bucle supera el límite. Para establecer el límite, utilice la función SetRecursion.

Ejemplo 1 

Devuelve el resultado de 5 a la potencia de 3. La instrucción Let establece el valor inicial 5 y una potencia de 3. El cálculo se repite varias veces hasta que se obtiene el resultado 5 * 5 * 5 = 125.

Copiar
Let ( 
    [ 
        value = 5 ; 
        power = 3 
    ] ; 
    While ( 
        [ 
            result = value ; 
            i = 1 
        ] ; 
        i < power ; 
        [ 
            i = i + 1 ; 
            result = result * value 
        ] ; 
        result 
    ) 
)

Ejemplo 2 

Suma los valores en la variable de repetición. $a. Cada reiteración de bucle aumenta count, empleado para especificar la variable de repetición $a y añade el valor al total acumulado. Este ejemplo devuelve 150.

Copiar
While ( 
    [ 
        count = 0 ; 
        total = 0 ; 
        $a[1] = 25 ; 
        $a[2] = 50 ; 
        $a[3] = 75 
    ] ; 
    count < 3 ; 
    [
        count = count + 1 ; 
        total = total + $a[count]
    ] ;
    total
)

Ejemplo 3 

Añade cinco puntos entre dos valores de texto. El ámbito de la variable de función Ciudad de la función While es independiente de la función Let, por lo que este ejemplo devuelve San Francisco.....París.

Copiar
Let (
    Ciudad = "París";
    While ( 
        [ Ciudad = "San Francisco"; i = 0 ] ; 
        i < 5 ;
        [
            i = i + 1 ;
            Ciudad = Ciudad & "."
        ] ; 
        Ciudad
    )
& Ciudad )

Si cada instancia de la variable de función Ciudad fuera reemplazada por la variable local $Ciudad, el ejemplo devuelve San Francisco.....San Francisco..... porque $Ciudad tiene el mismo alcance en todo el cálculo.

Ejemplo 4 

Ilustra cómo el alcance de las variables de función difiere cuando se define antes de un bucle While en comparación con cuando se define en los parámetros variableInicial y lógica del bucle While.

Los valores de it1 e it2 definidos antes del bucle While están disponibles dentro del bucle, pero los cambios realizados a it1 e it2 dentro del bucle no afectan a los valores de estas variables después del bucle. Este ejemplo también muestra cómo el valor 2 de la variable it2 definida en el parámetro lógica se pierde después de cada reiteración de bucle porque it2 no se inicia en el parámetro variableInicial.

Copiar
Let (
    [ // Antes del bucle While; establece la línea 1.0 del resultado
        it1 = "a"; // Definido en el ámbito Let
        it2 = 1; // Definido en el ámbito Let
        out = "1.0 " & it1 & " " & it2 & ¶
    ];
    While
    (
        [ // variablesIniciales; establece la línea 2.0 y 3.0 del resultado
            i = 0;
            out = out & "2.0 " & it1 & " " & it2 & ¶;
            it1 = "b"; // Definido en el ámbito While
            out = out & "3.0 " & it1 & " " & it2 & ¶
        ];
        // Condición
        i < 2;
        [ // lógica; establece la línea 4.x y 5.x del resultado
          // Las variables definidas en el parámetro lógica de los pases anteriores 
          // a través del bucle se eliminan en este punto
            i = i + 1;
            out = out & "4." & i & " " & it1 & " " & it2 & ¶;
            it1 = "c"; // Reutilizado en el ámbito While
            it2 = 2; // Redefinido en el ámbito While
            out = out & "5." & i & " " & it1 & " " & it2 & ¶
        ];
        // resultado; establece la línea 6.0 del resultado
        out & "6.0 " & it1 & " " & it2 & ¶
    )
    // Después del bucle While; establece la línea 7.0 del resultado
    & "7.0 " & it1 & " " & it2 & ¶
)

El resultado es:

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