F# 4.7 の新機能What's new in F# 4.7

F# 4.7 では、F# 言語に複数の改良が加えました。F# 4.7 adds multiple improvements to the F# language.

はじめにGet started

F# 4.7 は、すべての .NET コアディストリビューションと Visual Studio ツールで使用できます。F# 4.7 is available in all .NET Core distributions and Visual Studio tooling. F# の使用を開始して、詳細を確認してください。Get started with F# to learn more.

言語バージョンLanguage version

F# 4.7 コンパイラでは、プロジェクト ファイルのプロパティを使用して、有効な言語バージョンを設定する機能が導入されています。The F# 4.7 compiler introduces the ability to set your effective language version via a property in your project file:

<PropertyGroup>
    <LangVersion>preview</LangVersion>
</PropertyGroup>

4.6、 、 、4.7``latestおよびpreviewに設定できます。You can set it to the values 4.6, 4.7, latest, and preview. 既定では、 latestです。The default is latest.

preview設定すると、コンパイラは、コンパイラに実装されているすべての F# プレビュー機能をアクティブ化します。If you set it to preview, your compiler will activate all F# preview features that are implemented in your compiler.

暗黙的な利回りImplicit yields

配列、リスト、シーケンス、またはyield計算式で、型を推論できる場合にキーワードを適用する必要がなくなりました。You no longer need to apply the yield keyword in arrays, lists, sequences, or computation expressions where the type can be inferred. 次の例では、F# 4.7 より前のyield各エントリに対して、両方の式にステートメントが必要でした。In the following example, both expressions required the yield statement for each entry prior to F# 4.7:

let s = seq { 1; 2; 3; 4; 5 }

let daysOfWeek includeWeekend =
    [
        "Monday"
        "Tuesday"
        "Wednesday"
        "Thursday"
        "Friday"
        if includeWeekend then
            "Saturday"
            "Sunday"
    ]

単一yieldのキーワードを導入する場合は、他のすべての項目yieldもそのキーワードに適用されている必要があります。If you introduce a single yield keyword, every other item must also have yield applied to it.

暗黙的な利回りは、シーケンスの平坦化などの処理yield!にも使用される式で使用される場合はアクティブ化されません。Implicit yields are not activated when used in an expression that also uses yield! to do something like flatten a sequence. このような場合は、今日yieldも使用し続ける必要があります。You must continue to use yield today in these cases.

ワイルドカード識別子Wildcard identifiers

クラスを含む F# コードでは、メンバー宣言では自己識別子を常に明示的に指定する必要があります。In F# code involving classes, the self-identifier needs to always be explicit in member declarations. しかし、自己識別子が使用されていない場合、伝統的に、名前のない自己識別子を示すためにダブルアンダースコアを使用することが慣例でした。But in cases where the self-identifier is never used, it has traditionally been convention to use a double-underscore to indicate a nameless self-identifiers. 下線を 1 つ使用できるようになりました。You can now use a single underscore:

type C() =
    member _.M() = ()

これはforループにも当てはまります。This also applies for for loops:

for _ in 1..10 do printfn "Hello!"

インデントの緩和Indentation relaxations

F# 4.7 より前のバージョンでは、プライマリ コンストラクターと静的メンバー引数のインデント要件に過剰なインデントが必要でした。Prior to F# 4.7, the indentation requirements for primary constructor and static member arguments required excessive indentation. これで、1 つのインデント スコープのみが必要になります。They now only require a single indentation scope:

type OffsideCheck(a:int,
    b:int, c:int,
    d:int) = class end

type C() =
    static member M(a:int,
        b:int, c:int,
        d:int) = 1