F# 4.7'deki yenilikler

F# 4.7, F# diline birden çok geliştirme ekler.

Kullanmaya başlayın

F# 4.7 tüm .NET Core dağıtımlarında ve Visual Studio araçlarında kullanılabilir. Daha fazla bilgi edinmek için F# kullanmaya başlayın.

Dil sürümü

F# 4.7 derleyicisi, proje dosyanızdaki bir özellik aracılığıyla etkili dil sürümünüzü ayarlama olanağı sunar:

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

Bunu , , 4.7latestve previewdeğerlerine 4.6ayarlayabilirsiniz. Varsayılan değer: latest.

bunu olarak previewayarlarsanız, derleyiciniz derleyicinizde uygulanan tüm F# önizleme özelliklerini etkinleştirir.

Örtük verimler

Artık türün yield çıkarılabildiği dizilere, listelere, dizilere veya hesaplama ifadelerine anahtar sözcüğünü uygulamanız gerekmez. Aşağıdaki örnekte, her iki ifade de F# 4.7'den önceki her giriş için deyimini gerektiriyor yield :

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

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

Tek yield bir anahtar sözcük eklerseniz, diğer tüm öğeler de yield bu anahtar sözcüklere uygulanmış olmalıdır.

Bir diziyi düzleştirme gibi bir şey yapmak için de kullanan yield! bir ifadede kullanıldığında örtük verimler etkinleştirilmez. Bu gibi durumlarda bugün kullanmaya yield devam etmeniz gerekir.

Joker karakter tanımlayıcıları

Sınıflar içeren F# kodunda, kendi tanımlayıcısının üye bildirimlerinde her zaman açık olması gerekir. Ancak kendi tanımlayıcısının hiçbir zaman kullanılmadığı durumlarda, adsız self-tanımlayıcıları belirtmek için çift alt çizgi kullanılması geleneksel olarak kural olmuştur. Artık tek bir alt çizgi kullanabilirsiniz:

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

Bu, döngüler için for de geçerlidir:

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

Girinti gevşetmeler

F# 4.7'nin öncesinde, birincil oluşturucu ve statik üye bağımsız değişkenleri için girintileme gereksinimleri aşırı girinti gerektirirdi. Artık yalnızca tek bir girinti kapsamına ihtiyaç duyarlar:

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