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.

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 ouvertes ainsi que des déclarations d’opération, de fonction et de type. Celles-ci peuvent se produire dans n’importe quel ordre et sont récursives par défaut, ce qui signifie qu’elles peuvent être déclarées et utilisées dans n’importe quel ordre et peuvent être appelées. Il n’est pas nécessaire d’utiliser la déclaration d’un type ou d’un callable pour qu’il précède son utilisation.

Directives ouvertes

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 {
    
    open Microsoft.Quantum.Arithmetic; 
    open Microsoft.Quantum.Arrays as Array; 

    // ...
}

L’exemple utilise une directive open pour importer tous les types et les callables déclarés dans l’espace de noms Microsoft.Quantum.Arithmetic. Ils peuvent ensuite être référencés 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 l’origine de certains éléments, vous pouvez définir un autre nom, ou alias, qui est généralement plus court, pour un espace de noms particulier. Dans ce cas, tous les types et callables déclarés dans cet espace de noms peuvent être qualifiés par le nom abrégé défini à la place. Dans l’exemple précédent, c’est le cas de l’espace de noms Microsoft.Quantum.Arrays. Une fonction IndexRange déclarée dans Microsoft.Quantum.Arrays, par exemple, peut ensuite être utilisée par le biais de Array.IndexRange dans ce bloc d’espace de noms.

Que vous ouiez ouvrir un espace de noms ou définir un alias, open les directives sont valides dans l’ensemble de l’élément d’espace de noms dans ce fichier uniquement.