Partager via


Nouveautés de F# 4.7

F# 4.7 ajoute plusieurs améliorations au langage F#.

Bien démarrer

F# 4.7 est disponible dans toutes les distributions .NET Core et les outils Visual Studio. Consultez Prise en main avec F# pour en savoir plus.

Version du langage

Le compilateur F# 4.7 introduit la possibilité de définir votre version de langage effective via une propriété dans votre fichier projet :

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

Vous pouvez le définir sur les valeurs 4.6, 4.7, latest et preview. Par défaut, il s’agit de latest.

Si vous le définissez sur preview, votre compilateur activera toutes les fonctionnalités d’évaluation F# implémentées dans votre compilateur.

Interruptions implicites

Vous n’avez plus besoin d’appliquer le mot clé yield dans des tableaux, des listes, des séquences ou des expressions de calcul où le type peut être déduit. Dans l’exemple suivant, les deux expressions nécessitaient l’instruction yield pour chaque entrée antérieure à F# 4.7 :

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

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

Si vous introduisez un seul mot clé yield, yield doit également être appliqué sur tous les autres éléments.

Les interruptions implicites ne sont pas activés lorsqu’ils sont utilisés dans une expression qui utilise yield! également pour effectuer quelque chose comme aplatir une séquence. Vous devez continuer à utiliser yield aujourd’hui dans ces cas.

Identificateurs génériques

Dans le code F# impliquant des classes, l’auto-identificateur doit toujours être explicite dans les déclarations de membre. Mais dans les cas où l’auto-identificateur n’est jamais utilisé, il est traditionnellement conventionnel d’utiliser un double soulignement pour indiquer un auto-identificateur sans nom. Vous pouvez maintenant utiliser un soulignement unique :

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

Cela s’applique également aux boucles for :

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

Relaxations de la mise en retrait

Avant F# 4.7, les exigences de mise en retrait pour le constructeur principal et les arguments membres statiques nécessitaient une mise en retrait excessive. Elles ne nécessitent plus qu’une seule étendue de mise en retrait :

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