Verwenden von bedingter Logik zum Erstellen mehrerer Ausführungspfade
Nehmen Sie an, dass Sie über ein Programm verfügen, das auf Grundlage der Dateien im Ordner eine Sicherungsdatei erstellt. Das Programm besteht aus einigen Codezeilen, die bestimmte Dateien suchen und komprimieren. Was wäre, wenn Sie eine Logik hinzufügen möchten, die nur dann eine Sicherungsdatei erstellt, wenn an diesem Tag keine Sicherung erstellt wurde? Das Programm müsste diese Bedingung (wurde eine Sicherung erstellt?) überprüfen können und dann auf die Auswertung der Bedingung reagieren (wenn Sicherungsdatei für diesen Tag vorhanden, dann keine Sicherung ausführen).
Erstellen einer Codeverzweigung mithilfe eines if-Konstrukts
Ein if-Konstrukt wertet einen booleschen Ausdruck aus. Wenn der Ausdruck als true ausgewertet wird, führt das Programm einen bestimmten Codebranch aus. Hier sehen Sie die Syntax für ein if-Konstrukt:
if <condition> then <expression>
Hier sehen Sie ein konkreteres Codebeispiel:
let age = 66
if age > 65
then printfn "Senior citizen"
Definieren einer Alternativverzweigung mithilfe einer else-Klausel
Wenn eine if-Anweisung als false ausgewertet wird, verwenden Sie eine else-Klausel mit dem if-Konstrukt, um einen anderen Codebranch auszuführen.
So können Sie eine else-Klausel verwenden:
let age = 66
if age > 65
then printfn "Senior citizen"
else printfn "Citizen"
Verwenden eines if-Konstrukts als Ausdruck
Bisher haben Sie gelernt, wie Sie if und else verwenden können, um verschiedene Verzweigungen im Code zu erstellen. Wenn der Code verschiedenen Verzweigungen folgt, erzeugt er unterschiedliche Ergebnisse, je nachdem, ob eine boolesche Bedingung als true oder false ausgewertet wird. Wenn ein Ausdruck ausgeführt wird, wird immer ein Wert generiert, auch wenn Ihnen das möglicherweise nicht bewusst ist.
Wenn der Code wie in diesem Beispiel geschrieben wurde, wird dieses Ergebnis deutlich:
let age = 64
let message = if age > 65 then "Senior citizen" else "Citizen"
printfn "%s" message
In diesem Fall funktionieren if und else eher wie ein ternärer Ausdruck. Wenn eine Bedingung als true ausgewertet wird, wird ein Wert zurückgegeben. Wenn sie als false ausgewertet wird, wird der andere Wert zurückgegeben. In beiden Fällen wird ein Wert zurückgegeben. Eine Tatsache, die für alle if-Ausdrücke zutrifft.
Sehen Sie sich noch einmal ein früheres Codebeispiel genauer an:
let age = 66
if age > 65 then printfn "Senior citizen" else printfn "Citizen"
Es handelt sich um das gleiche Codebeispiel wie zuvor, doch if und else befinden sich jetzt in derselben Zeile. Da die wichtigen Aktionen des printf-Vorgangs in der Funktion erfolgen, muss die Funktion keinen tatsächlichen Wert zurückgeben. Daher erzeugt der Rückgabewert des printfn "Senior citizen"-Ausdrucks einen Wert vom Typ unit.
Hinweis
unit ist ein Wert, der als Platzhalter fungiert, wenn kein realer Wert zurückgegeben wird. Sie können ihn sich als void oder None vorstellen.
Sie müssen ferner beachten, dass Typen nicht gemischt werden dürfen.
if und else müssen denselben Datentyp zurückgeben, sonst tritt ein Fehler auf. Das folgende Codebeispiel wäre nicht zulässig:
let someCondition = true
let value = if someCondition then "hello" else 1 // not allowed
In diesem Fall bestimmt if, dass der Rückgabetyp string lautet, sodass else diesen Typ nicht in int ändern kann. Sie müssen das vorangehende Codebeispiel überarbeiten, damit es funktioniert:
let someCondition = true
let value = if someCondition then "hello" else "1" // allowed
Verwenden eines elif-Konstrukts
Bisher haben Sie gelernt, wie if und else funktionieren.
elif ist ein weiteres Konstrukt, das Sie ähnlich wie if verwenden können. Genau wie ein if-Konstrukt nimmt das elif-Konstrukt einen booleschen Wert an und sollte direkt nach if hinzugefügt werden. Das elif-Konstrukt wird ausgeführt, wenn die if-Bedingung als false ausgewertet wird. Hier ein Verwendungsbeispiel für elif:
let cardValue = 1
let cardDescription = if cardValue = 1 then "Ace" elif cardValue = 14 then "Ace" else "A card"
printfn "%s" cardDescription