Partager via


Espaces de noms

Au niveau supérieur, un programme Q# se compose d’un ensemble d’espaces de noms. Hormis les commentaires, les espaces de noms sont les seuls éléments de niveau supérieur d’un programme Q# et tous les autres éléments doivent se trouver dans un espace de noms. Chaque fichier peut contenir zéro, un ou plusieurs espaces de noms, et chaque espace de noms peut s’étendre sur plusieurs fichiers. Q# ne prend pas en charge les espaces de travail imbriqués.

Remarque

Si vous ne déclarez pas explicitement d’espace de noms, le Q# compilateur utilise le nom de fichier comme nom d’espace de noms.

Un bloc d’espace de noms se compose du mot clé namespace suivi du nom de l’espace de noms et du contenu du bloc à l’intérieur des accolades { }. Les noms d’espaces de noms sont constitués d’une séquence d’un ou de plusieurs symboles légaux séparés par un point (.). Tandis que les noms d’espaces de noms peuvent contenir des points pour une meilleure lisibilité, Q# ne prend pas en charge les références relatives aux espaces de noms. Par exemple, deux espaces de noms Foo et Foo.Bar ne sont pas liés, et il n’existe aucune notion de hiérarchie. En particulier, pour une fonction Baz définie dans Foo.Bar, il n’est pas possible d’ouvrir Foo, puis d’accéder à cette fonction via Bar.Baz.

Les blocs d’espace de noms peuvent contenir des directives d’importation, des opérations, des fonctions et des déclarations de type. Ces éléments peuvent se produire dans n’importe quel ordre et sont récursifs par défaut, ce qui signifie qu’ils peuvent être déclarés et utilisés dans n’importe quel ordre et peuvent s’appeler eux-mêmes. Il n’est pas nécessaire que la déclaration d’un type ou d’un appel précède son utilisation.

Directives Import

Par défaut, tous les éléments déclarés dans le même espace de noms sont accessibles sans qualification supplémentaire. Toutefois, les déclarations dans un autre espace de noms peuvent uniquement être utilisées en qualifiant leur nom avec le nom de l’espace de noms auquel elles appartiennent ou en ouvrant cet espace de noms avant son utilisation, comme illustré dans l’exemple suivant.

namespace Microsoft.Quantum.Samples {
    
    import Microsoft.Quantum.Arithmetic.*; 
    import Microsoft.Quantum.Arrays.* as Array; 

    // ...
}

Remarque

Pour les espaces de noms dans la bibliothèque standardQ#, la racine de l’espace de noms peut être simplifiée .Std Par exemple, l’exemple précédent peut être réécrit comme suit :

import Std.Arithmetic.*; 
import Std.Arrays.* as Array; 

L’exemple utilise une import directive pour importer tous les types et appelants déclarés dans l’espace Microsoft.Quantum.Arithmetic de noms. Vous pouvez ensuite les référencer par leur nom non qualifié, sauf si ce nom est en conflit avec une déclaration dans le bloc d’espace de noms ou un autre espace de noms ouvert.

Pour éviter de taper le nom complet tout en faisant la distinction entre certains éléments, vous pouvez définir un autre nom ou un alias pour un espace de noms particulier. Dans ce cas, vous pouvez qualifier tous les types et appelants déclarés dans cet espace de noms par le nom court défini à la place. L’exemple précédent utilise un alias pour l’espace Microsoft.Quantum.Arrays de noms. Vous pouvez ensuite utiliser la fonction IndexRange, déclarée dans Microsoft.Quantum.Arrays, par exemple, via Array.IndexRange ce bloc d’espace de noms.

Que vous ouvrez un espace de noms ou que vous définissez un alias, import les directives sont valides dans l’élément d’espace de noms de ce fichier uniquement.