Namespaces
Em seu nível superior, um programa Q# consiste em um conjunto de namespaces. Além dos comentários, os namespaces são os únicos elementos de nível superior em um programa Q#, e todos os outros elementos devem residir em um namespace. Cada arquivo pode conter zero ou mais namespaces, e cada namespace pode abranger vários arquivos. O Q# não dá suporte a namespaces.
Observação
Se você não declarar explicitamente um namespace, o Q# compilador usará o nome do arquivo como o nome do namespace.
Um bloco de namespace consiste na palavra-chave namespace
, seguida pelo nome do namespace e pelo conteúdo do bloco nas chaves { }
.
Os nomes de namespace consistem em uma sequência de um ou mais símbolos legais separados por um ponto (.
).
Embora os nomes de namespace possam conter pontos para melhor legibilidade, o Q# não oferece suporte a referências relativas a namespaces. Por exemplo, dois namespaces Foo
e Foo.Bar
não estão relacionados, e não há nenhuma noção de uma hierarquia. Em particular, para uma função Baz
definida no Foo.Bar
, não é possível abrir Foo
e, em seguida, acessar essa função pelo Bar.Baz
.
Os blocos de namespace podem conter diretivas de importação, operações, funções e declarações de tipo . Esses elementos podem ocorrer em qualquer ordem e são recursivos por padrão, o que significa que podem ser declarados e usados em qualquer ordem e podem se chamar. Não há necessidade de a declaração de um tipo ou chamável para preceder seu uso.
Importar Diretivas
Por padrão, tudo declarado no mesmo namespace pode ser acessado sem qualificação adicional. No entanto, as declarações em um namespace diferente só podem ser usadas qualificando seu nome com o nome do namespace ao qual pertencem ou abrindo o namespace antes que ele seja usado, conforme mostrado no exemplo a seguir.
namespace Microsoft.Quantum.Samples {
import Microsoft.Quantum.Arithmetic.*;
import Microsoft.Quantum.Arrays.* as Array;
// ...
}
Observação
Para namespaces na biblioteca padrão Q# , a raiz do namespace pode ser simplificada para Std
. Por exemplo, o exemplo anterior pode ser reescrito como:
import Std.Arithmetic.*;
import Std.Arrays.* as Array;
O exemplo usa uma import
diretiva para importar todos os tipos e chamáveis declarados no Microsoft.Quantum.Arithmetic
namespace. Em seguida, você pode se referir a eles pelo nome não qualificado, a menos que esse nome entre em conflito com uma declaração no bloco de namespace ou outro namespace aberto.
Para evitar digitar o nome completo e ainda distinguir de onde vêm determinados elementos, você pode definir um nome alternativo, ou alias, para um namespace específico. Nesse caso, você pode qualificar todos os tipos e chamáveis declarados nesse namespace pelo nome abreviado definido.
O exemplo anterior usa um alias para o Microsoft.Quantum.Arrays
namespace. Em seguida, você pode usar a função IndexRange
, declarada em Microsoft.Quantum.Arrays
, por exemplo, via Array.IndexRange
dentro desse bloco de namespace.
Se você estiver abrindo um namespace ou definindo um alias, import
as diretivas serão válidas em toda a parte do namespace somente nesse arquivo.