4.6의 F# 새로운 기능What's new in F# 4.6

F#4.6는 언어에 대 한 F# 여러 가지 향상 된 기능을 추가 합니다.F# 4.6 adds multiple improvements to the F# language.

시작Get started

F#4.6는 모든 .NET Core 배포 및 Visual Studio 도구에서 사용할 수 있습니다.F# 4.6 is available in all .NET Core distributions and Visual Studio tooling. 시작 F# 하 여 자세히 알아보세요.Get started with F# to learn more.

익명 레코드Anonymous records

익명 레코드 는 4.6에 F# 도입 된 F# 새로운 종류의 유형입니다.Anonymous records are a new kind of F# type introduced in F# 4.6. 사용 하기 전에 선언 하지 않아도 되는 명명 된 값의 단순 집계입니다.They are simple aggregates of named values that don't need to be declared before use. 구조체 또는 참조 형식 중 하나로 선언할 수 있습니다.You can declare them as either structs or reference types. 기본적으로 참조 형식입니다.They're reference types by default.

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

값 형식을 그룹화 하 고 성능이 중요 한 시나리오에서 작동 하는 경우에 대 한 구조체로 선언할 수도 있습니다.They can also be declared as structs for when you want to group value types and are operating in performance-sensitive scenarios:

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

매우 강력 하 고 다양 한 시나리오에서 사용할 수 있습니다.They're quite powerful and can be used in numerous scenarios. 익명 레코드에서 자세히 알아보세요.Learn more at Anonymous records.

ValueOption 함수ValueOption functions

4.5에 F# 추가 된 valueoption 형식에는 이제 옵션 유형을 사용 하는 "모듈 바인딩된 함수 패리티"가 있습니다.The ValueOption type added in F# 4.5 now has "module-bound function parity" with the Option type. 가장 일반적으로 사용 되는 예제는 다음과 같습니다.Some of the more commonly-used examples are as follows:

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

이렇게 하면 값 형식이 성능을 향상 시키는 시나리오에서 옵션과 마찬가지로 ValueOption을 사용할 수 있습니다.This allows for ValueOption to be used just like Option in scenarios where having a value type improves performance.