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:
-
Evalúa el parámetro de
variableInicial
. -
Evalúa el parámetro de
condición
. -
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:
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.
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.
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.
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
.
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