F# – Funktionale und objektorientierte Programmierung auf .NET
F# ist eine Multi-Paradigmen-Sprache auf der .NET-Plattform: Sie kombiniert funktionale Programmierung (unveränderliche Daten, Funktionen als Werte) mit Objektorientierung und Imperativem Stil, wenn es nötig ist. Entwickelt bei Microsoft Research, eignet sich F# besonders für Datenanalyse, wissenschaftliches Rechnen und Domain-Driven Design – und sie läuft überall, wo .NET läuft (Windows, Linux, macOS).
Die wichtigsten F#-Befehle
dotnet new console -lang F#– erzeugt ein neues F#-Konsolenprojekt.dotnet new classlib -lang F#– erzeugt eine F#-Bibliothek.dotnet run– baut und startet das Projekt.dotnet build– kompiliert ohne zu starten;dotnet testführt Tests aus.dotnet fsi– startet die F# Interactive REPL.dotnet add package FSharp.Data– fügt ein NuGet-Paket hinzu.dotnet publish -c Release– erzeugt ein Release-Deployment.
Grundkonzepte
- Let-Bindings:
let x = 42bindet einen Namen an einen Wert. Alles ist ein Ausdruck, der einen Wert liefert. - Unveränderlichkeit: Standardmäßig sind Werte unveränderlich (
let mutablemacht sie änderbar). - Pipelines: Der Pipe-Operator
|>reicht Daten von links nach rechts durch Funktionen:values |> List.map f |> List.sum. - Pattern Matching:
matchzerlegt Werte und ersetzt längere if-else-Ketten. - Discriminated Unions: eigener Typ für klar definierte Alternativen – ideal für Domain-Modelle.
Beispiel: Fibonacci mit Pattern Matching
let rec fib n =
match n with
| 0 -> 0
| 1 -> 1
| n -> fib (n - 1) + fib (n - 2)
[ 0 .. 10 ] |> List.map fib |> printfn "%A"
F# vs. C#
Wo C# bei großen Enterprise-Anwendungen und Frameworks dominiert, punktet F# mit knapper, ausdrucksstarker Syntax und typsicheren Domain-Modellen. Beide Sprachen teilen dieselbe Laufzeit – F#-Code kann C#-Bibliotheken direkt nutzen und umgekehrt.
Weiterführend: Haskell: Pure Functional Programming und R für Datenanalyse.