Erste Schritte mit F# in Visual Studio Code

Sie können F# in Visual Studio Code mit dem Ionide-Plug-In schreiben, um eine plattformübergreifende einfache IDE-Umgebung (Integrated Development Environment) mit IntelliSense und Coderefactorings zu erhalten. Besuchen Sie Ionide.io, um mehr über das Plug-In zu erfahren.

Stellen Sie zunächst sicher, dass F# und das Ionide-Plug-In ordnungsgemäß installiert sind.

Erstellen Ihres ersten Projekts mit Ionide

Zum Erstellen eines neuen F#-Projekts öffnen Sie eine Befehlszeile und erstellen mit der .NET CLI ein neues Projekt:

dotnet new console -lang "F#" -o FirstIonideProject

Wechseln Sie nach Abschluss des Vorgangs zum Verzeichnis des Projekts, und öffnen Sie Visual Studio Code:

cd FirstIonideProject
code .

Nachdem das Projekt in Visual Studio Code geladen wurde, sollte der F#-Bereich „Projektmappen-Explorer“ links im geöffneten Fenster zu sehen sein. Dies bedeutet, dass Ionide das soeben erstellte Projekt erfolgreich geladen hat. Sie können vor diesem Zeitpunkt Code im Editor schreiben, aber sobald dies geschieht, ist der Ladevorgang abgeschlossen.

Schreiben Ihres ersten Skripts

Nachdem Sie Visual Studio Code für .NET Core-Skripts konfiguriert haben, navigieren Sie in Visual Studio Code zur Ansicht „Explorer“ und erstellen eine neue Datei. Nennen Sie sie MyFirstScript.fsx.

Fügen Sie ihr nun folgenden Code hinzu:

let toPigLatin (word: string) =
    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
    if isVowel word[0] then
        word + "yay"
    else
        word[1..] + string(word[0]) + "ay"

Diese Funktion konvertiert ein Wort in eine Form von Pig Latin. Der nächste Schritt besteht darin, sie mit F# Interactive (FSI) auszuwerten.

Markieren Sie die gesamte Funktion (sie sollte 11 Zeilen aufweisen). Sobald sie markiert ist, drücken Sie bei gedrückter ALT-TASTE die EINGABETASTE. Am unteren Bildschirmrand wird ein Terminalfenster angezeigt, das in etwa wie folgt aussehen sollte:

Example of F# Interactive output with Ionide

Dadurch wurden drei Schritte ausgeführt:

  1. Der FSI-Prozess wurde gestartet.
  2. Der markierte Code wurde an den FSI-Prozess gesendet.
  3. Der FSI-Prozess hat den von Ihnen gesendeten Code ausgewertet.

Da der Inhalt des Versands eine Funktion war, können Sie diese Funktion jetzt mit FSI aufrufen! Führen Sie im interaktiven Fenster Folgendes aus:

toPigLatin "banana";;

Das folgende Ergebnis wird angezeigt:

val it: string = "ananabay"

Versuchen wir es nun mit einem Vokal als ersten Buchstaben. Geben Sie Folgendes ein:

toPigLatin "apple";;

Das folgende Ergebnis wird angezeigt:

val it: string = "appleyay"

Die Funktion scheint wie erwartet zu funktionieren. Herzlichen Glückwunsch, Sie haben gerade Ihre erste F#-Funktion in Visual Studio Code geschrieben und mit FSI ausgewertet!

Hinweis

Wie Sie vielleicht bemerkt haben, werden die Zeilen in FSI mit ;; beendet. Das liegt daran, dass FSI die Eingabe mehrerer Zeilen zulässt. ;; am Ende zeigt FSI an, wenn der Code komplett ist.

Erläutern des Codes

Wenn Sie nicht sicher sind, was der Code tatsächlich tut, finden Sie hier eine Schritt-für-Schritt-Anleitung.

Wie Sie sehen können, ist toPigLatin eine Funktion, die ein Wort als Eingabe verwendet und es in eine Pig Latin-Darstellung dieses Worts konvertiert. Die Regeln dafür sind wie folgt:

Wenn das erste Zeichen in einem Wort mit einem Vokal beginnt, fügen Sie am Ende des Worts „yay“ hinzu. Wenn es nicht mit einem Vokal beginnt, verschieben Sie dieses erste Zeichen an das Ende des Worts, und fügen Sie „ay“ an.

Möglicherweise haben Sie in FSI Folgendes bemerkt:

val toPigLatin: word: string -> string

Dies besagt, dass toPigLatin eine Funktion ist, die string als Eingabe (genannt word) akzeptiert und string zurückgibt. Dies wird als Typsignatur der Funktion bezeichnet, ein grundlegendes Element von F#, das für das Verständnis von F#-Code entscheidend ist. Sie werden diese auch bemerken, wenn Sie mit dem Mauszeiger auf die Funktion in Visual Studio Code zeigen.

Im Körper der Funktion werden Ihnen zwei unterschiedliche Teile auffallen:

  1. Eine innere Funktion namens isVowel, die bestimmt, ob ein bestimmtes Zeichen (c) ein Vokal ist, indem geprüft wird, ob es per Musterabgleich mit einem der bereitgestellten Muster übereinstimmt:

    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
  2. Ein if..then..else-Ausdruck, der überprüft, ob das erste Zeichen ein Vokal ist und einen Rückgabewert anhand der Eingabezeichen basierend darauf erstellt, ob das erste Zeichen ein Vokal war oder nicht:

    if isVowel word[0] then
        word + "yay"
    else
        word[1..] + string(word[0]) + "ay"
    

Der Ablauf von toPigLatin ist also wie folgt:

Überprüfen, ob das erste Zeichen des Eingabeworts ein Vokal ist. Falls ja, „yay“ am Ende des Worts anfügen. Andernfalls dieses erste Zeichen an das Ende des Worts verschieben und „ay“ anfügen.

Als Letztes ist Folgendes zu beachten: In F# gibt es keine explizite Anweisung, die von der Funktion zurückgegeben werden soll. Dies liegt daran, dass F# ausdrucksbasiert ist und der letzte Ausdruck, der im Text einer Funktion ausgewertet wird, den Rückgabewert dieser Funktion bestimmt. Da if..then..else selbst ein Ausdruck ist, bestimmt die Auswertung des Körpers des Blocks then oder else den Wert, den die Funktion toPigLatin zurückgibt.

Umwandeln der Konsolen-App in einen Pig Latin-Generator

In den vorherigen Abschnitten dieses Artikels wurde ein allgemeiner erster Schritt beim Schreiben von F#-Code veranschaulicht: Schreiben einer ersten Funktion mit interaktiver Ausführung mithilfe von FSI. Dies wird als REPL-gesteuerte Entwicklung bezeichnet, wobei REPL für „Read-Evaluate-Print Loop“ steht. Dies ist eine hervorragende Möglichkeit, mit Funktionen zu experimentieren, bis Sie ein brauchbares Ergebnis erhalten.

Der nächste Schritt bei der REPL-gesteuerten Entwicklung besteht darin, funktionierenden Code in eine F#-Implementierungsdatei zu verschieben. Diese kann dann vom F#-Compiler in eine ausführbare Assembly kompiliert werden.

Öffnen Sie zunächst die Datei Program.fs, die Sie zuvor mit der .NET CLI erstellt haben. Sie werden feststellen, dass bereits Code vorhanden ist.

Erstellen Sie als Nächstes ein neues module namens PigLatin, und kopieren Sie die zuvor erstellte toPigLatin-Funktion in das Modul:

module PigLatin =
    let toPigLatin (word: string) =
        let isVowel (c: char) =
            match c with
            | 'a' | 'e' | 'i' | 'o' | 'u'
            | 'A' | 'E' | 'I' | 'O' | 'U' -> true
            |_ -> false
        
        if isVowel word[0] then
            word + "yay"
        else
            word[1..] + string word[0] + "ay"

Dieses Modul sollte sich oberhalb der main-Funktion und unterhalb der open System-Deklaration befinden. Die Reihenfolge von Deklarationen ist in F# wichtig. Daher müssen Sie die Funktion definieren, ehe Sie sie in einer Datei aufrufen.

Rufen Sie nun in der main-Funktion Ihre Pig Latin-Generatorfunktion für die folgenden Argumente auf:

[<EntryPoint>]
let main args =
    for arg in args do
        let newArg = PigLatin.toPigLatin arg
        printfn "%s in Pig Latin is: %s" arg newArg

    0

Jetzt können Sie Ihre Konsolen-App über die Befehlszeile ausführen:

dotnet run apple banana

Sie werden sehen, dass die Ausgabe das gleiche Ergebnis liefert wie Ihre Skriptdatei, aber diesmal als ausgeführtes Programm!

Problembehandlung für Ionide

Es folgen einige Möglichkeiten, bestimmte möglicherweise auftretende Probleme zu beheben:

  1. Um die Codebearbeitungsfunktionen von Ionide nutzen zu können, müssen Ihre F#-Dateien auf dem Datenträger und in einem Ordner gespeichert werden, der im Visual Studio Code-Arbeitsbereich geöffnet ist.
  2. Wenn Sie Änderungen am System vorgenommen oder die erforderlichen Ionide-Komponenten bei geöffnetem Visual Studio Code installiert haben, starten Sie Visual Studio Code neu.
  3. Wenn ungültige Zeichen in Ihren Projektverzeichnissen enthalten sind, funktioniert Ionide möglicherweise nicht. Benennen Sie Ihre Projektverzeichnisse um, wenn dies der Fall ist.
  4. Wenn keiner der Ionide-Befehle funktioniert, überprüfen Sie Ihre Visual Studio Code-Schlüsselbindungen, um festzustellen, ob Sie sie versehentlich überschreiben.
  5. Wenn Ionide auf Ihrem Computer nicht funktioniert und das Problem mit keinem der genannten Vorschläge behoben wurde, versuchen Sie, das Verzeichnis ionide-fsharp auf Ihrem Computer zu entfernen und die Plug-In-Sammlung erneut zu installieren.
  6. Wenn ein Projekt nicht geladen werden konnte (was im Projektmappen-Explorer von F# angezeigt wird), klicken Sie mit der rechten Maustaste auf dieses Projekt, und klicken Sie dann auf Details anzeigen, um weitere Diagnoseinformationen zu erhalten.

Ionide ist ein Open-Source-Projekt, das von Mitgliedern der F#-Community erstellt und gepflegt wird. Im GitHub-Repository ionide-vscode-fsharp können Sie Probleme melden oder Beiträge beisteuern.

Sie können im Ionide Gitter-Kanal auch die Ionide-Entwickler und F#-Community um weitere Hilfe bitten.

Nächste Schritte

Weitere Informationen zu F# und den Features der Sprache finden Sie unter Tour of F#.