Partager via


Déclarations de type

Q# prend en charge les types de struct définis par l’utilisateur. struct types sont similaires aux types d’enregistrements en F# ; ils sont immuables, mais prennent en charge une construction copie et mise à jour.

Types de structs

struct types ne peuvent contenir que des éléments nommés et ne prennent pas en charge les éléments anonymes. Toute combinaison d’éléments nommés est prise en charge, même si les éléments ne peuvent pas être imbriqués.

La déclaration suivante, par exemple, définit un struct Complex qui a deux éléments nommés Real et Imaginary, tous deux de type Double:

struct Complex {
    Real : Double,
    Imaginary : Double,
}

Vous pouvez accéder aux éléments contenus par le biais de leur nom ou par de déconstruction (pour plus d’informations, consultez 'accès aux éléments). Vous pouvez également accéder à un tuple de tous les éléments où la forme correspond à celle définie dans la déclaration via l’opérateur unwrap.

struct types sont utiles pour deux raisons. Tout d’abord, tant que les bibliothèques et les programmes qui utilisent les types définis accèdent aux éléments via leur nom plutôt qu’en déconstruction, le type peut être étendu pour contenir des éléments supplémentaires ultérieurement sans interrompre le code de bibliothèque. En raison de cela, l’accès aux éléments via la déconstruction est déconseillé.

Deuxièmement, Q# vous permet de transmettre l’intention et les attentes d’un type de données spécifique, car il n’existe aucune conversion automatique entre les valeurs de deux types struct, même si leurs types d’éléments sont identiques.

Constructeurs de structs

Le compilateur génère automatiquement des constructeurs pour les nouveaux types struct lorsqu’il lit une définition de struct. Pour le struct Complex dans l’exemple précédent, vous pouvez créer une instance avec

let complexPair = Complex(1.4, 2.1);

Vous pouvez également définir des instances avec le mot clé new, par exemple

let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };

Vous pouvez copier un struct existant avec la syntaxe ...

let copyPair = new Complex { ...complexPair };

Lors de la copie, vous pouvez spécifier des champs individuels à modifier

let updatedPair = new Complex { ...complexPair, Real = 3.5 };