Share via


Déclarations de type

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

Types définis par l'utilisateur

Les types définis par l’utilisateur peuvent contenir des éléments nommés et des éléments anonymes. La déclaration suivante dans un espace de noms, par exemple, définit un type Complex qui a deux éléments nommés Real et Imaginary, les deux de type Double :

    newtype Complex = (Real: Double, Imaginary : Double);

Toute combinaison d’éléments nommés et non nommés est prise en charge, et les éléments internes peuvent également être nommés. Par exemple, le type Nested, défini comme

newtype Nested = (Double, (ItemName : Int, String)); 

contient deux éléments anonymes de type Double et String respectivement, et un élément nommé ItemName de type Int.

Vous pouvez accéder aux éléments contenus en utilisant leur nom ou par déconstruction (pour plus d’informations, consultez l’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 en utilisant l’opérateur unwrap.

Les types définis par l’utilisateur 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 en utilisant leur nom plutôt que par déconstruction, le type peut être étendu pour contenir des éléments supplémentaires par la suite sans rompre le code de la bibliothèque. Pour cette raison, 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 relatives à un type de données spécifique, car il n’y a pas de conversion automatique entre les valeurs de deux types définis par l’utilisateur, même si leurs types d’élément sont identiques.

Constructeurs définis par l’utilisateur

Les constructeurs des types définis par l’utilisateur sont générés automatiquement par le compilateur. Actuellement, il n’est pas possible de définir un constructeur personnalisé, même si cela pourrait être ajouté au langage à l’avenir.