Solange

Wiederholt Logik, solange die Bedingung wahr ist und gibt dann das Ergebnis zurück.

Format 

Solange ( [ InitialVariable ] ; Bedingung ; [ Logik ] ; Ergebnis )

Parameter 

initialVariable - Variablendefinitionen, die zur Verwendung in den folgenden Parametern verfügbar sind.

Bedingung - ein Boolescher Ausdruck, der vor jeder Schleifeniteration berechnet wird. Die Schleife wird wiederholt, solange der Ausdruck wahr ergibt. Wenn er falsch ergibt, endet die Schleife.

Logik - Variablendefinitionen, die bei jeder Wiederholung der Schleife berechnet werden.

Ergebnis - ein Ausdruck, der zurückgegeben wird, wenn die Schleife stoppt.

Zurückgegebener Datentyp 

Text, Zahl, Datum, Zeit, Zeitstempel, Container

Ursprung in Version 

18.0

Beschreibung 

Die Funktion „Solange“ führt die folgenden Schritte aus:

  1. Berechnet den Parameter InitialVariable.

  2. Berechnet den Parameter Bedingung.

  3. Wenn die Bedingung Folgendes ergibt:

    • Wahr (jedes Zahlenergebnis ungleich null), wird Logik berechnet und dann Schritt 2 wiederholt.

    • Falsch (0), wird die Schleife beendet und Ergebnis zurückgegeben.

Sie können mehrere Variablendefinitionen für InitialVariable und Logik angeben, indem Sie sie in eckige Klammern [ ] setzen und sie jeweils durch ein Semikolon trennen. Beispiel:

Kopieren
Solange ( 
    [ InitVar1 = Wert1 ; InitVar2 = Wert2 ; ...] ; 
    Bedingung ; 
    [ LogikVar1 = Ausdruck1 ; LogikVar2 = Ausdruck2 ; ...] ; 
    Ergebnis 
)

Die in den Parametern InitialVariable und Logik angegebenen Variablen werden von links nach rechts berechnet. Diese Variablen befinden sich im selben Geltungsbereich und können in den Parametern Bedingung und Ergebnis verwendet werden. Weitere Informationen finden Sie unter Verwenden von Variablen.

Variablen, die Informationen von einer Schleifeniteration zur nächsten übernehmen sollen, müssen initialisiert werden, bevor sie im Parameter Logik verwendet werden. Andernfalls werden ihre Werte gelöscht.

Hinweise 

  • Zur Vermeidung von Endlosschleifen, bei denen FileMaker-Clients nicht mehr reagieren würden, gibt diese Funktion „?“ zurück, sobald die Anzahl der Schleifenwiederholungen ein Limit überschreitet. Verwenden Sie die Funktion „SetzeRekursion“, um das Limit festzulegen.

Beispiel 1 

Gibt das Ergebnis von 5 hoch 3 zurück. Die SetzeVar-Anweisung legt den Anfangswert von 5 und die Potenz von 3 fest. Die Berechnung läuft in mehreren Schleifen ab, bis das Ergebnis 5 * 5 * 5 = 125 erreicht ist.

Kopieren
SetzeVar (
    [
        Wert = 5 ;
        Potenz = 3
    ] ;
    Solange (
        [ Ergebnis = Wert ; i = 1 ] ;
        i < Potenz ;
        [ i = i + 1 ; Ergebnis = Ergebnis * Wert ] ;
        Ergebnis
    )
)

Beispiel 2 

Addiert die Werte in der wiederholenden Variablen $a. Jede Schleifeniteration erhöht Anzahl, verwendet diese um die Variablenwiederholung $a anzugeben und addiert den Wert zur laufenden Summe. Dieses Beispiel gibt 150 zurück.

Kopieren
Solange ( 
    [ 
        Zähler = 0 ; 
        Gesamt = 0 ; 
        $a[1] = 25 ; 
        $a[2] = 50 ; 
        $a[3] = 75 
    ] ; 
    Zähler < 3 ; 
    [
        Zähler = Zähler + 1 ; 
        Gesamt = Gesamt + $a[Zähler]
    ] ;
    Gesamt
)

Beispiel 3 

Fügt fünf Punkte zwischen zwei Textwerte. Der Geltungsbereich der Funktionsvariablen Ortin der Funktion „Solange“ unterscheidet sich von derjenigen in „SetzeVar“. Dieses Beispiel gibt also San Francisco.....Paris zurück.

Kopieren
SetzeVar (
    Ort = "Paris";
    Solange ( 
        [ Ort = "San Francisco"; i = 0 ] ; 
        i < 5 ;
        [
            i = i + 1 ;
            Ort = Ort & "."
        ] ; 
        Ort
    )
& Ort )

Wenn jede Instanz der Funktionsvariable Ort durch die lokale Variable $Ort ersetzt würde, würde das Beispiel San Francisco.....San Francisco....., da $Ort während der gesamten Rechnung denselben Geltungsbereich hat.

Beispiel 4 

Illustriert, wie sich der Geltungsbereich von Funktionsvariablen unterscheidet, wenn diese vor einer „Solange“-Schleife definiert werden im Unterschied zur Definition in den Parametern InitialVariable und Logik innerhalb der Schleife.

Die Werte von it1 und it2, die vor der Schleife definiert werden, sind innerhalb der Schleife verfügbar. Jedoch beeinflussen Änderungen an it1 und it2, die innerhalb der Schleife erfolgen, nicht die Werte dieser Variablen nach der Schleife. Dieses Beispiel zeigt auch, dass der Wert 2 der Variablen it2, die im Parameter Logik definiert ist, nach jeder Schleifeniteration verloren geht, da it2 nicht im Parameter InitialVariable initialisiert wird.

Kopieren
SetzeVar (
    [ // Vor „Solange“-Schleife; legt Zeile 1.0 von Ergebnis fest
        it1 = "a"; // Definiert im Geltungsbereich SetzeVar
        t2 = 1; // Definiert im Geltungsbereich SetzeVar
        out = "1.0 " & it1 & " " & it2 & ¶
    ];
    Solange
    (
        [ // InitialVariablen; legt Zeilen 2.0 und 3.0 von Ergebnis fest
            i = 0;
            out = out & "2.0 " & it1 & " " & it2 & ¶;
            it1 = "b"; // Definiert im Geltungsbereich von „Solange“
            out = out & "3.0 " & it1 & " " & it2 & ¶
        ];
        // Bedingung
        i < 2;
        [ // Logik; legt Zeilen 4.x und 5.x von Ergebnis fest
          // Variablen, die im Logik-Parameter von vorherigen Durchgängen
          // durch die Schleife definiert wurden, werden jetzt gelöscht
            i = i + 1;
            out = out & "4." & i & " " & it1 & " " & it2 & ¶;
            it1 = "c"; // Wiederverwendet im Geltungsbereich von „Solange“
            it2 = 2; // Neu definiert im Geltungsbereich von „Solange“
            out = out & "5." & i & " " & it1 & " " & it2 & ¶
        ];
        // Ergebnis; legt Zeile 6.0 von Ergebnis fest
        out & "6.0 " & it1 & " " & it2 & ¶
    )
    // Nach „Solange“-Schleife; legt Zeile 7.0 von Ergebnis fest
    & "7.0 " & it1 & " " & it2 & ¶
)

Das Ergebnis ist:

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