Partager via


Valeurs Null (F#)

Cette rubrique décrit l'utilisation de la valeur Null en F#.

Valeur Null

Normalement, la valeur Null n'est pas utilisée en F# pour des valeurs ou des variables.Toutefois, Null apparaît comme une valeur anormale dans certaines situations.Si un type est défini en F#, la valeur null n'est pas autorisée comme valeur normale à moins que l'attribut AllowNullLiteral ne soit appliqué au type.Si un type est défini dans un autre langage .NET, Null est une valeur possible, et lorsque vous interagissez avec de tels types, votre code F# peut rencontrer des valeurs Null.

Pour un type défini en F# et utilisé strictement à partir de F#, la seule façon de créer une valeur null à l'aide de la bibliothèque F# directement est d'utiliser Unchecked.defaultof ou Array.zeroCreate.Toutefois, pour un type F# utilisé à partir d'autres langages .NET, ou si vous utilisez ce type avec une API qui n'est pas écrite en F#, telle que le .NET Framework, des valeurs Null peuvent se produire.

Vous pouvez utiliser le type option en F# si vous utilisez une variable de référence avec une valeur Null possible dans un autre langage .NET.À la place de Null, avec un type option F#, vous utilisez la valeur d'option None s'il n'y a pas d'objet.Vous utilisez la valeur d'option Some(obj) avec un objet obj lorsqu'il y a un objet.Pour plus d’informations, consultez Options (F#).

Le mot clé null est un mot clé valide dans le langage F#, et vous devez l'utiliser lorsque vous travaillez avec des API .NET Framework ou d'autres API écrites dans un autre langage .NET.Vous pouvez avoir besoin d'une valeur Null dans les deux situations suivantes : lorsque vous appelez une API .NET et passez une valeur Null en tant qu'argument, et lorsque vous interprétez la valeur de retour ou un paramètre de sortie à partir d'un appel de méthode .NET.

Pour passer une valeur Null à une méthode .NET, utilisez simplement le mot clé null dans le code appelant.L'exemple de code suivant illustre ceci.

open System

// Pass a null value to a .NET method.
let ParseDateTime (str: string) =
    let (success, res) = DateTime.TryParse(str, null, System.Globalization.DateTimeStyles.AssumeUniversal)
    if success then
        Some(res)
    else
        None

Pour interpréter une valeur Null obtenue à partir d'une méthode .NET, utilisez si possible des critères spéciaux.L'exemple de code suivant montre comment utiliser des critères spéciaux pour interpréter la valeur Null retournée par ReadLine en cas de tentative de lecture au-delà de la fin d'un flux d'entrée.

// Open a file and create a stream reader.
let fileStream1 =
    try
        System.IO.File.OpenRead("TextFile1.txt")
    with 
        | :? System.IO.FileNotFoundException -> printfn "Error: TextFile1.txt not found."; exit(1)

let streamReader = new System.IO.StreamReader(fileStream1)

// ProcessNextLine returns false when there is no more input;
// it returns true when there is more input.
let ProcessNextLine nextLine =
    match nextLine with
    | null -> false
    | inputString ->
        match ParseDateTime inputString with
        | Some(date) -> printfn "%s" (date.ToLocalTime().ToString())
        | None -> printfn "Failed to parse the input."
        true

// A null value returned from .NET method ReadLine when there is
// no more input.
while ProcessNextLine (streamReader.ReadLine()) do ()

Des valeurs Null pour des types F# peuvent aussi être générées d'autres manières, par exemple lorsque vous utilisez Array.zeroCreate, qui appelle Unchecked.defaultof.Vous devez faire preuve de prudence avec ce code pour garder les valeurs Null encapsulées.Dans une bibliothèque prévue uniquement pour F#, il est inutile de vérifier la présence de valeurs Null dans chaque fonction.Si vous écrivez une bibliothèque pour l'interopérabilité avec d'autres langages .NET, vous devrez peut-être ajouter des contrôles pour les paramètres d'entrée null et lever une ArgumentNullException, comme vous le feriez en C# ou en Visual Basic.

Vous pouvez utiliser le code suivant pour vérifier si une valeur arbitraire est null.

match box value with
| null -> printf "The value is null."
| _ -> printf "The value is not null."

Voir aussi

Référence

Expressions match (F#)

Autres ressources

Valeurs (F#)