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:

  1. Evalueert de parameter voor beginVariabele.

  2. Evalueert de parameter voor voorwaarde.

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

Kopiëren
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.

Kopiëren
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.

Kopiëren
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.

Kopiëren
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.

Kopiëren
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