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.