While
Herhaalt logica wanneer de voorwaarde waar is en geeft vervolgens het resultaat.
Opmaak
While ([ beginVariabele ] ; voorwaarde ; [ logica ] ; resultaat)
Parameters
beginVariabele
- definities voor variabelen die beschikbaar zijn voor gebruik in de volgende parameters.
voorwaarde
- een logische uitdrukking die voor iedere iteratie van een lus wordt geëvalueerd. Wanneer deze Waar is, wordt de lus herhaald. Wanneer deze Onwaar is, stopt de lus.
logica
- definities van variabelen die iedere keer dat de lus wordt herhaald, worden geëvalueerd.
resultaat
- een uitdrukking die wordt geretourneerd wanneer de lus stopt.
Resulterend gegevenstype
tekst, getal, datum, tijd, tijdstempel, container
Afkomstig uit versie
18.0
Beschrijving
De functie While voert de volgende stappen uit:
-
Evalueert de parameter voor
beginVariabele
. -
Evalueert de parameter voor
voorwaarde
. -
Als
voorwaarde
de volgende resultaten oplevert:-
Waar (elk numeriek resultaat dat niet nul is), evalueert deze
logica
en herhaalt deze stap 2. -
Onwaar (0), stopt deze de lus en retourneert deze
resultaat
.
-
U kunt meerdere definities opgeven voor de variabelen beginVariabele
en logica
. Dit doet u door de definities tussen vierkante haken [ ] te plaatsen en de definities van elkaar te scheiden door middel van een puntkomma. Bijvoorbeeld:
While (
[ initVar1 = value1 ; initVar2 = value2 ; ...] ;
condition ;
[ logicVar1 = expression1 ; logicVar2 = expression2 ; ...] ;
result
)
De variabelen die zijn opgegeven in de parameters beginVariabele
en logica
worden van links naar rechts geëvalueerd. Deze variabelen bevinden zich binnen hetzelfde bereik en kunnen worden gebruikt voor de parameters voorwaarde
en resultaat
. Raadpleeg Variabelen gebruiken.
Variabelen die informatie moeten behouden tussen één iteratie van een lus en de volgende, moeten worden geïnitialiseerd voordat ze worden gebruikt in de parameter logica
. Anders worden de betreffende waarden verwijderd.
Opmerkingen
-
Deze functie geeft "?" als resultaat wanneer het aantal iteraties van lussen een bepaalde limiet overschrijdt. Zo wordt voorkomen dat er oneindige lussen ontstaan, die er uiteindelijk voor zorgen dat FileMaker-clients niet meer reageren. Gebruik de SetRecursion functie om de limiet in te stellen.
Voorbeeld 1
Dit voorbeeldscript geeft als resultaat 5 tot de macht 3. De instructie Let bepaalt dat de beginwaarde
5 is en de macht
3. De berekening herhaalt zich meerdere keren totdat het resultaat
5 * 5 * 5 = 125 is bereikt.
Let (
[
value = 5 ;
power = 3
] ;
While (
[ result = value ; i = 1 ] ;
i < power ;
[ i = i + 1 ; result = result * value ] ;
result
)
)
Voorbeeld 2
Dit voorbeeldscript berekent de som van de waarden in de herhalende variabele $a
. Bij iedere herhaling van een lus wordt aantal
verhoogd, wordt deze variabele gebruikt om de herhaling van variabele $a
in te stellen en wordt deze waarde opgeteld bij het lopende totaal
. In dit voorbeeld is het resultaat 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
)
Voorbeeld 3
Dit voorbeeldscript plaatst vijf punten tussen twee tekstwaarden. Het bereik van de functievariabele Stad
in de functie While staat los van die in Let, dus dit voorbeeld geeft als resultaat San Francisco.....Parijs.
Let (
Stad = "Parijs";
While (
[ Stad = "San Francisco"; i = 0 ] ;
i < 5 ;
[
i = i + 1 ;
Stad = Stad & "."
] ;
Stad
)
& Stad)
Als iedere vermelding van de functievariabele Stad
zou worden vervangen door de lokale variabele $Stad
, geeft het voorbeeld als resultaat San Francisco.....San Francisco....., omdat $Stad
hetzelfde bereik heeft gedurende de hele berekening.
Voorbeeld 4
Dit voorbeeldscript geeft aan hoe het bereik van functievariabelen verschilt wanneer deze voor een While-lus worden gedefinieerd in vergelijking met wanneer deze worden gedefinieerd in de parameters beginVariabele
en logica
van de While-lus.
De waarden van it1
en it2
die voor de While-lus zijn gedefinieerd, zijn binnen de lus beschikbaar, maar wijzigingen die binnen de lus worden aangebracht in it1
en it2
, hebben geen invloed op de waarden van deze variabelen na de lus. Dit voorbeeld laat ook zien hoe de waarde 2 van de variabele it2
, die in de parameter logica
is gedefinieerd, na iedere iteratie van een lus verloren gaat, omdat it2
niet is geïnitialiseerd in de parameter beginVariabele
.
Let (
[ // Voor While-lus; geeft regel 1.0 weer van resultaat
it1 = "a"; // Gedefinieerd in het bereik van Let
it2 = 1; // Gedefinieerd in het bereik van Let
out = "1.0 " & it1 & " " & it2 & ¶
];
While
(
[ // initialVariables; geeft regels 2.0 en 3.0 weer van resultaat
i = 0;
out = out & "2.0 " & it1 & " " & it2 & ¶;
it1 = "b"; // Gedefinieerd in het bereik van While
out = out & "3.0 " & it1 & " " & it2 & ¶
];
// Voorwaarde
i < 2;
[ // logica; geeft regels 4.x en 5.x weer van resultaat
// Variabelen die in de parameter logica zijn gedefinieerd tijdens eerdere herhalingen
// van de lus worden op dit punt verwijderd
i = i + 1;
out = out & "4." & i & " " & it1 & " " & it2 & ¶;
it1 = "c"; // Hergebruikt in het bereik van While
it2 = 2; // Opnieuw gedefinieerd in het bereik van While
out = out & "5." & i & " " & it1 & " " & it2 & ¶
];
// resultaat; geeft regel 6.0 van resultaat weer
out & "6.0 " & it1 & " " & it2 & ¶
)
// Na While-lus; geeft regel 7.0 weer van resultaat
& "7.0 " & it1 & " " & it2 & ¶
)
Het resultaat is:
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