Neues in F# 4.6

F# 4.6 erweitert die Sprache F# mit mehreren Verbesserungen.

Erste Schritte

F# 4.6 ist in allen .NET Core-Distributionen und Visual Studio-Tools verfügbar. Weitere Informationen finden Sie unter Erste Schritte mit F#.

Anonyme Datensätze

Bei anonymen Datensätzen handelt es sich um einen neuartigen F#-Typ, der in F# 4.6 eingeführt wurde. Dabei handelt es sich um einfache Aggregate benannter Werte, die vor der Verwendung nicht deklariert werden müssen. Sie können sie entweder als Struktur oder als Verweistypen deklarieren. Standardmäßig sind sie Verweistypen.

open System

let getCircleStats radius =
    let d = radius * 2.0
    let a = Math.PI * (radius ** 2.0)
    let c = 2.0 * Math.PI * radius

    {| Diameter = d; Area = a; Circumference = c |}

let r = 2.0
let stats = getCircleStats r
printfn "Circle with radius: %f has diameter %f, area %f, and circumference %f"
    r stats.Diameter stats.Area stats.Circumference

Sie können auch als Strukturen deklariert werden, wenn Sie in leistungssensiblen Szenarien Werttypen gruppieren möchten:

open System

let getCircleStats radius =
    let d = radius * 2.0
    let a = Math.PI * (radius ** 2.0)
    let c = 2.0 * Math.PI * radius

    struct {| Diameter = d; Area = a; Circumference = c |}

let r = 2.0
let stats = getCircleStats r
printfn "Circle with radius: %f has diameter %f, area %f, and circumference %f"
    r stats.Diameter stats.Area stats.Circumference

Sie sind sehr leistungsfähig und können in zahlreichen Szenarien verwendet werden. Weitere Informationen finden Sie unter Anonyme Datensätze.

ValueOption-Funktionen

Der ValueOption-Typ, der in F# 4.5 hinzugefügt wurde, verfügt jetzt mit dem Option-Typ über eine „modulgebundene Funktionsparität“. Nachstehend sind einige gebräuchliche Beispiele aufgeführt:

// Multiply a value option by 2 if it has  value
let xOpt = ValueSome 99
let result = xOpt |> ValueOption.map (fun v -> v * 2)

// Reverse a string if it exists
let strOpt = ValueSome "Mirror image"
let reverse (str: string) =
    match str with
    | null
    | "" -> ValueNone
    | s ->
        str.ToCharArray()
        |> Array.rev
        |> string
        |> ValueSome

let reversedString = strOpt |> ValueOption.bind reverse

So kann ValueOption genau wie Option in Szenarien verwendet werden, in denen ein Werttyp die Leistung verbessert.