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