While

Upprepar logik medan villkoret är sant och returnerar sedan resultatet.

Format 

While ( [ initialVariabel ] ; villkor ; [ logik ] ; resultat )

Parametrar 

initialVariabel – variabeldefinitioner som blir tillgängliga att använda i följande parametrar.

villkor – ett booleskt uttryck som utvärderas före varje loopupprepning. Så länge det är Sant upprepas loopen. När det är Falskt stoppas loopen.

logik – variabeldefinitioner som utvärderas varje gång loopen upprepas.

resultat – ett uttryck som returneras när loopen stoppas.

Returnerad datatyp 

Text, numeriskt, datum, tid, tidsstämpel, container

Ursprungsversion 

18.0

Beskrivning 

While-funktionen utför följande steg:

  1. Utvärderar parametern initialVariabel.

  2. Utvärderar parametern villkor.

  3. Om villkor är:

    • Sant (alla numeriska resultat som inte är noll), utvärderar logik och upprepar sedan steg 2.

    • Falskt (0), stoppar loopen och returnerar resultat.

Du kan ange flera variabeldefinitioner för initialVariabel och logik genom att omsluta dem med hakparenteser [ ] och avgränsa dem med ett semikolon. Till exempel:

Kopiera
While ( 
    [ initVar1 = värde1 ; initVar2 = värde2 ; ...] ; 
    villkor ; 
    [ logicVar1 = uttryck1 ; logicVar2 = uttryck2 ; ...] ; 
    resultat 
)

Variablerna som anges i parametrarna initialVariabel och logik utvärderas från vänster till höger. Dessa variabler är inom samma räckvidd och kan användas i parametrarna villkor och resultat. Mer information finns i Använda variabler.

Variabler som behöver bevara information från en loopupprepning till nästa måste initialiseras innan de användas i parametern logik. I annat fall raderas deras värden.

Kommentarer 

  • För att förhindra oändliga loopar som skulle göra att FileMaker-klienter slutar att svara returnerar den här funktionen "?" när antalet loopupprepningar överstiger en gräns. Ange gränsen med hjälp av Funktionen SetRecursion.

Exempel 1 

Returnerar resultatet av 5 upphöjt till 3. Let-uttrycket fastställer initialt värde till 5 och potensen till 3. Beräkningen loopar flera gånger tills resultatet 5 * 5 * 5 = 125 uppnås.

Kopiera
Let (
    [
        värde = 5 ;
        potens = 3
    ] ;
    While (
        [ resultat = värde ; i = 1 ] ;
        i < potens ;
        [ i = i + 1 ; resultat = resultat * värde ] ;
        resultat
    )
)

Exempel 2 

Summerar värdena i den upprepande variabeln $a. Varje loopupprepning ökar stegvis antal, använder det för att ange variabelrepetitionen $a och lägger till värdet till det löpande totalt. Det här exemplet returnerar 150.

Kopiera
While ( 
    [ 
        antal = 0 ; 
        totalt = 0 ; 
        $a[1] = 25 ; 
        $a[2] = 50 ; 
        $a[3] = 75 
    ] ; 
    antal < 3 ; 
    [
        antal = antal + 1 ; 
        totalt = totalt + $a[antal]
    ] ;
    totalt
)

Exempel 3 

Lägger till fem punkter mellan två textvärden. Räckvidden för funktionsvariabeln Ort i While-funktionen skiljer sig från den i Let, så det här exemplet returnerar San Francisco.....Paris.

Kopiera
Let (
    Ort = "Paris";
    While ( 
        [ Ort = "San Francisco"; i = 0 ] ; 
        i < 5 ;
        [
            i = i + 1 ;
            Ort = Ort & "."
        ] ; 
        Ort
    )
& Ort )

Om alla instanser av funktionsvariabeln Ort skulle ersättas med den lokala variabeln $Ort, returnerar exemplet San Francisco.....San Francisco....., eftersom $Ort har samma räckvidd genom hela beräkningen.

Exempel 4 

Illustrerar hur funktionsvariablernas räckvidd skiljer sig när de definieras före en While-loop jämfört med när de definieras i While-loopens parametrar initialVariabel och logik.

Värdena för it1 och it2 som definierats före While-loopen är tillgängliga i loopen, men ändringar av som görs av it1 och it2 i loppen påverkar inte värdena för dessa variabler efter loopen. Det här exemplet visar också hur värdet 2 för variabeln it2 som definieras i parametern logik försvinner efter varje loopupprepning eftersom it2 inte initialiseras i parametern initialVariabel.

Kopiera
Let(
    [ // Före While-loop; anger rad 1.0 av resultat
        it1 = "a"; // Definieras i räckvidden för Let
        it2 = 1; // Definieras i räckvidden för Let
        ut = "1.0 " & it1 & " " & it2 & ¶
    ];
    While
    (
        [ // initialaVariabler; anger rad 2.0 och 3.0 av resultat
            i = 0;
            ut = ut & "2.0 " & it1 & " " & it2 & ¶;
            it1 = "b"; // Definieras i räckvidden för While
            ut = ut & "3.0 " & it1 & " " & it2 & ¶
        ];
        // Villkor
        i < 2;
        [ // logik; anger rad 4.x och 5.x av resultat
          // Variabler som definierats i logikparametern i föregående pass
          // under loopen raderas vid den här punkten
            i = i + 1;
            ut = ut & "4." & i & " " & it1 & " " & it2 & ¶;
            it1 = "c"; // Återanvänds i räckvidden för While
            it2 = 2; // Definieras om i räckvidden för While
            ut = ut & "5." & i & " " & it1 & " " & it2 & ¶
        ];
        // resultat; anger rad 6.0 av resultat
        ut & "6.0 " & it1 & " " & it2 & ¶
    )
    // Efter While-loop; anger rad 7.0 av resultat
    & "7.0 " & it1 & " " & it2 & ¶
)

Resultatet är:

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