Endlich implizite yields! Zusammen mit .NET Core 3.0 wurden auch neue Features für F# veröffentlicht. Das Release 4.7 der funktionalen Programmiersprache liefert unter anderem Anpassungen an der Compiler Infrastruktur und schafft Syntax Vereinfachung.
Damit die neusten Features genutzt werden können, installiert man entweder Visual Studio 2019 oder .NET Core 3.0.
Implicit Yields
Ab Version 4.7 können jetzt alle expliziten yield
Schlüsselwörter entfernt werden, welche in Listen, Sequenzen oder Arrays verwendet wurden.
Jetzt ist es möglich auf das Schlüsselwort zu verzichten, auch wenn Werte abhängig einer Bedingung erstellt wurden.
Aber keine Sorge, es wird auch weiterhin der bestehende Code, mit expliziten yields
, funktionieren. Diese Anpassung wurde von Fable inspiriert. Es macht die Sprache konsistenter, da man bereits in vorherigen Versionen auf das yield
Keyword bei Listen, Arrays und Expressions verzichten konnte.
Möglicher Fallstrick: Ausgangssituation ist ein bestehendes Projekt, welches eine global.json beinhaltet und das Projekt verwendet implizite yields. Mit Visual Studio 2019 kompiliert das Projekt erfolgreich und ohne Warnungen. Wird jedoch dotnet
zum Kompilieren verwendet, wird die entsprechende Version aus der global.json
herangezogen. Im schlimmsten Fall kompiliert alles durch und es gibt eine Warnung, dass nur der letzte Wert in eine Liste hinzugefügt wird. D.h. der Code kompiliert auch im alten Compiler, jedoch mit anderer Semantik.
Ebenso sollte bei Einzeilern beachtet werden, dass Einfügen von Werten mittels Bedingung anderes Verhalten zeigt als eventuell erwartet.
Beispiel Code: let inlineList flag = [ "one" ; if flag then "two"; "three"; ]
Wäre flag
auf false
, dann beinhaltet die Liste nur den Wert one
! Die Bedingung fügt alle darauf folgenden Werte hinzu.
Lang Version
Mittels einem neuen Property LangVersion
ist es ab sofort möglich die Version der Sprache mit dem Compiler anzupassen. Jetzt kann dies projektspezifisch festgelegt werden und noch mehr!
Es ist durch LangVersion
auch möglich Features zu verwenden, die noch nicht freigegeben sind (Preview). Damit ist man bereits während der Entwicklung von neuen Features, beispielsweise F# 5.0 Features, in der Lage diese zu testen und Feedback abzugeben. Die LangVersion
kann Werte ab Version 4.6 unterstützen. Um alle möglichen Werte abzufragen, führt man dotnet fsi --langversion:?
aus. Mögliche Ausgabe: preview, default, latest, latestmajor, 4.6, 4.7 (Default).
Ist der LangVersion
Wert nicht korrekt erhält man folgenden Fehler: error FS0246: Unrecognized value '****' for --langversion use --langversion:? for complete list
Projektdatei, welche eine Vorschau auf kommende Features ermöglicht
Syntax Vereinfachung
Mit zwei größeren Vereinfachungen, fällt jetzt auch der Einstieg in F# noch leichter.
Die Einrückung für Parameter in Konstruktoren und statischen Methoden wurde vereinfacht. Bisher war es notwendig, dass die Parameter untereinander eingerückt waren. Die neue Einrückung lässt Code schneller schreiben.
Bisherige Einrückung | Neue mögliche Einrückung
Der doppelte Unterstrich für Member Deklarationen ist hinfällig. Hat man keine Verwendung für das this
, war es bisher notwendig zwei Unterstriche zu verwenden, ab Version 4.7 ist dies mit einem Unterstrich möglich.
Auch bei Schleifen, bei denen der Indexer nicht verwendet wird, kann ein Unterstrich verwendet werden. Wie das auch in anderen Bereichen der Sprache üblich ist.
Hat man in vorherigen Version versucht, nur einen Unterstrich zu verwenden, hat man folgenden Fehler erhalten: error FS0010: Unexpected symbol '.' in member definition. Expected 'with', '=' or other token.
Weitere Updates
In Visual Studio 2019 wurden einige Verbesserungen, im Umgang mit F#, vorgenommen. Unter anderem wurden die ToolTip Inhalte angepasst.
Beispiel für einen ToolTip
Verwendet die F# Interactive .NET Core 3.0, wird eine stabile Preview herangezogen. Um F# Interactive zu verwenden, dotnet fsi
in einer Kommandozeile ausführen. Zu beachten ist, dass bei dem Hinzufügen von Abhängigkeiten und deren transitive Referenzen, Pakete, #r nuget:paket-name
, verwendet werden, statt manuelle Einbinden von Referenzen. Die Ünterstützung der Paketverwaltung folgt als Preview in .NET 5, aktuell ist diese nur in nächtlichen Builds des Compilers verfügbar.
Mit diesen neuen Features wird noch effektiver entwickelt und man kann den Blick auf das Wesentliche halten! Gespannt schaut man auf die Zukunft und kann sie bereits testen. (s.h. LangVersion Preview)
Sprechen Sie uns an, wenn auch Sie Fragen zu Themen rund um .NET Core haben oder Hilfe bei Portierung Ihrer Anwendung nach .NET Core 3.0 in Ihrem Unternehmen benötigen. Wir führen Sie gerne ans Ziel.