Erste Schritte mit F# in Visual Studio für Mac

Wichtig

Microsoft hat die Ausmusterung von Visual Studio für Mac angekündigt. Visual Studio für Mac wird ab dem 31. August 2024 nicht mehr unterstützt. Zu den Alternativen gehören:

  • Visual Studio Code mit dem C# Dev-Kit und verwandten Erweiterungen, z. B. .NET MAUI und Unity.
  • Visual Studio wird unter Windows in einer VM auf einem Mac ausgeführt.
  • Visual Studio wird unter Windows in einer VM in der Cloud ausgeführt.

Weitere Informationen finden Sie in der Einstellungsankündigung von Visual Studio für Mac.

F# wird in der Visual Studio für Mac-IDE unterstützt. Vergewissern Sie sich, dass Visual Studio für Mac installiert ist.

Erstellen einer Konsolenanwendung

Eines der einfachsten Projekte in Visual Studio für Mac ist die Konsolen-App. Dazu gehen Sie wie folgt vor. Gehen Sie folgendermaßen vor, nachdem Visual Studio für Mac geöffnet wurde:

  1. Zeigen Sie im Menü Datei auf Neue Projektmappe.

  2. Im Dialogfeld „Neues Projekt“ gibt es zwei verschiedene Vorlagen für eine Konsolenanwendung. Es gibt eine unter „Andere -> .NET“, die auf das .NET Framework abzielt. Die andere Vorlage befindet sich unter „.NET Core –> App“, die auf .NET Core abzielt. Beide Vorlagen sollten für den Zweck dieses Artikels funktionieren.

  3. Ändern Sie unter der Konsolen-App ggf. C# in F#. Klicken Sie auf die Schaltfläche Weiter, um fortzufahren!

  4. Geben Sie Ihrem Projekt einen Namen, und wählen Sie die gewünschten Optionen für die App aus. Beachten Sie, dass der Vorschaubereich an der Bildschirmseite die Verzeichnisstruktur anzeigt, die basierend auf den ausgewählten Optionen erstellt wird.

  5. Klicken Sie auf Erstellen. Jetzt sollte im Projektmappen-Explorer ein F#-Projekt angezeigt werden.

Schreiben des Codes

Beginnen wir damit, zuerst etwas Code zu schreiben. Achten Sie darauf, dass die Datei Program.fs geöffnet ist, und ersetzen Sie dann deren Inhalt durch folgenden Code:

module HelloSquare

let square x = x * x

[<EntryPoint>]
let main argv =
    printfn "%d squared is: %d!" 12 (square 12)
    0 // Return an integer exit code

Im obigen Codebeispiel wurde eine Funktion namens square definiert, die eine Eingabe mit dem Namen x übernimmt und diese mit sich selbst multipliziert. Da F# Typrückschluss verwendet, muss der Typ von x nicht angegeben werden. Der F#-Compiler kennt die Typen, bei denen eine Multiplikation zulässig ist, und weist x abhängig davon, wie square aufgerufen wurde, einen Typ zu. Wenn Sie mit der Maus auf square zeigen, sollte Folgendes angezeigt werden:

val square: x:int -> int

Dies wird als Typsignatur der Funktion bezeichnet. Diese kann wie folgt gelesen werden: „Square ist eine Funktion, die eine ganze Zahl mit dem Namen x akzeptiert und eine ganze Zahl erzeugt“. Beachten Sie, dass der Compiler square vorerst den Typ int zugewiesen hat. Dies liegt daran, dass die Multiplikation nicht für alle Typen, sondern nur für einen geschlossenen Satz von Typen allgemeingültig ist. Der F#-Compiler hat an diesem Punkt int ausgewählt. Er passt aber die Typsignatur an, wenn Sie square mit einem anderen Eingabetyp aufrufen, z. B. float.

Es wird eine weitere Funktion, main, definiert, die mit dem EntryPoint-Attribut versehen ist, um dem F#-Compiler mitzuteilen, dass die Programmausführung dort beginnen soll. Es folgt der gleichen Konvention wie andere C-Programmiersprachen, wobei Befehlszeilenargumente an diese Funktion übergeben werden können und ein ganzzahliger Code zurückgegeben wird (in der Regel 0).

In dieser Funktion rufen wir die Funktion square mit dem Argument 12 auf. Der F#-Compiler weist dann square den Typ int -> int zu (d. h. eine Funktion, die ein int übernimmt und ein int erzeugt). Der Aufruf von printfn ist eine Funktion für die formatierte Ausgabe, die ähnlich wie C-Programmiersprachen eine Formatzeichenfolge sowie Parameter verwendet, die den in der Formatzeichenfolge angegebenen Parametern entsprechen, und dann das Ergebnis und eine neue Zeile ausgibt.

Ausführen Ihres Codes

Sie können den Code ausführen und die Ergebnisse anzeigen, indem Sie im Menü der obersten Ebene auf Ausführen und dann auf Starten ohne Debuggen klicken. Dadurch wird das Programm ohne Debugfunktionalität ausgeführt und Sie können die Ergebnisse sehen.

Im Konsolenfenster, das von Visual Studio für Mac eingeblendet wurde, sollte die folgende Ausgabe angezeigt werden:

12 squared is 144!

Herzlichen Glückwunsch! Sie haben Ihr erstes F#-Projekt in Visual Studio für Mac erstellt, eine F#-Funktion geschrieben, die Ergebnisse des Aufrufs dieser Funktion ausgegeben, und das Projekt ausgeführt, um einige Ergebnisse anzuzeigen.

Verwenden von F# Interactive

Eines der besten Features der F#-Tools in Visual Studio für Mac ist das F# Interactive-Fenster. Sie können dort Code an einen Prozess senden, in dem Sie den Code aufrufen und das Ergebnis interaktiv anzeigen können.

Um das Feature zu verwenden, markieren Sie die in Ihrem Code definierte Funktion square. Klicken Sie als Nächstes im Menü auf der obersten Ebene auf Bearbeiten. Wählen Sie dann Auswahl an F# Interactive senden aus. Dadurch wird der Code im F# Interactive-Fenster ausgeführt. Alternativ können Sie mit der rechten Maustaste auf die Auswahl klicken und Auswahl an F# Interactive senden auswählen. Das F# Interactive-Fenster sollte mit dem folgenden Inhalt angezeigt werden:

>

val square: x: int -> int

>

Es wird die gleiche Funktionssignatur für die square-Funktion angezeigt, die Sie zuvor gesehen haben, als Sie mit der Maus auf die Funktion gezeigt haben. Da square jetzt im F# Interactive-Prozess definiert ist, ist ein Aufruf mit unterschiedlichen Werten möglich:

> square 12;;
val it: int = 144
> square 13;;
val it: int = 169

Daraufhin wird die Funktion ausgeführt, das Ergebnis an den neuen Namen it gebunden sowie der Typ und der Wert von it angezeigt. Beachten Sie, dass Sie jede Zeile mit ;; beenden müssen. So weiß F# Interactive, wann der Funktionsaufruf beendet ist. Sie können auch neue Funktionen in F# Interactive definieren:

> let isOdd x = x % 2 <> 0;;

val isOdd: x: int -> bool

> isOdd 12;;
val it: bool = false

Oben wird eine neue Funktion, isOdd, definiert, die int übernimmt und überprüft, ob der Wert ungerade ist! Sie können diese Funktion aufrufen, um die Rückgabe bei verschiedenen Eingaben zu sehen. Sie können Funktionen innerhalb von Funktionsaufrufen aufrufen:

> isOdd (square 15);;
val it: bool = true

Sie können auch den Pipe-Forward-Operator verwenden, um den Wert an die beiden Funktionen zu übergeben:

> 15 |> square |> isOdd;;
val it: bool = true

Der Pipe-Forward-Operator und mehr werden in späteren Tutorials behandelt.

Dies ist nur ein flüchtiger Blick auf die Möglichkeiten, die F# Interactive bietet. Weitere Informationen finden Sie unter Interaktive Programmierung mit F#.

Nächste Schritte

Lesen Sie die Einführung in F#, in der einige Kernfeatures von F# behandelt werden (sofern noch nicht geschehen). Sie gibt einen Überblick über einen Teil des Funktionsumfangs von F# und enthält viele Codebeispiele, die Sie in Visual Studio für Mac kopieren und ausführen können. Es gibt auch einige großartige externe Ressourcen, die Sie verwenden können und im F#-Leitfaden vorgestellt werden.

Siehe auch