Utilisation de types de référence Nullable en F #

Aug 27 2020

En F #, si vous interagissez avec un autre langage .NET, ou si vous utilisez l' AllowNullLiteralattribut, un type de référence peut être null. L'exemple qui me vient tout de suite à l'esprit est celui des chaînes:

let str: string = null

Mais avec C # 8 et dotnet core 3, nous pouvons opter pour les types de référence Nullable . Je devrais écrire le code ci-dessus en C # comme:

string? str = null;

Existe-t-il un moyen d'activer également les types de référence Nullable en F # afin que les types définis dans d'autres langages ne puissent pas être null, et s'ils le peuvent, écrivez-les en tant que référence Nullable comme:

let str: string = null // error cannot do this
let str: string? = null

Je suis conscient que nous pouvons convertir des types qui pourraient être attendus nullen utilisant Options:

let str : string = null
let strOpt = Option.ofObj str

Ma question est la suivante: y a-t-il un élément qui rend impossible la création d'un type de référence null, comme string, sans le déclarer explicitement comme étant nullable en F #?

Réponses

4 piggyBot Aug 27 2020 at 03:52

De https://www.infoq.com/news/2019/04/FSharp-Nulls/,

"F # prend actuellement en charge plusieurs versions de nullabilité. Premièrement, il existe des types de référence .NET normaux. Aujourd'hui, il n'y a aucun moyen d'informer sans équivoque le compilateur si une variable de type de référence spécifique est nullable ou non, donc leur utilisation dans F # est déconseillée."

"L'alternative préférée est Option. Également appelé type« peut-être », il s'agit d'un moyen sécurisé d'exprimer le concept de nullabilité. Lorsqu'il est utilisé avec un code F # idiomatique, vous ne pouvez lire la valeur qu'après avoir vérifié si elle est non nul (pas «aucun» dans le langage F #). Cela se fait généralement par correspondance de motifs. "

Cependant, le désir qu'il y aurait une manière propre d'interopérer avec ceux-ci? Les annotations sont reconnues par l'équipe F #, et une proposition de types de référence Nullable peut être trouvée ici . À ce jour, la proposition est «approuvée en principe» mais aucun prototype de mise en œuvre n'existe encore.