Wat is er nieuw in F# 4.6

F# 4.6 voegt meerdere verbeteringen toe aan de F#-taal.

Aan de slag

F# 4.6 is beschikbaar in alle .NET Core-distributies en Visual Studio-hulpprogramma's. Ga aan de slag met F# voor meer informatie.

Anonieme records

Anonieme records zijn een nieuw type F#dat is geïntroduceerd in F# 4.6. Ze zijn eenvoudige aggregaties van benoemde waarden die niet hoeven te worden gedeclareerd voor gebruik. U kunt ze declareren als structs of verwijzingstypen. Dit zijn standaard referentietypen.

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

Ze kunnen ook worden gedeclareerd als structs voor wanneer u waardetypen wilt groeperen en in prestatiegevoelige scenario's wilt werken:

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

Ze zijn vrij krachtig en kunnen in talloze scenario's worden gebruikt. Meer informatie vindt u op Anonieme records.

ValueOption-functies

Het type ValueOption dat is toegevoegd in F# 4.5, heeft nu 'modulegebonden functiepariteit' met het optietype. Enkele van de veelgebruikte voorbeelden zijn als volgt:

// 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

Hierdoor kan ValueOption net als Option worden gebruikt in scenario's waarin een waardetype de prestaties verbetert.