Partager via


Déclarations de type

Q# prend en charge les types de struct définis par l’utilisateur. types sont similaires aux types d’enregistrements en F# ; ils sont immuables, mais prennent en charge une construction de de copie et de 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 généralement 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

Les constructeurs de nouveaux types struct sont générés automatiquement par le compilateur 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);

Les instances peuvent également être définies par l’utilisateur avec le mot clé new, par exemple

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

Vous pouvez également 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 };