Espaços de nomes

No nível superior, um Q# programa consiste num conjunto de espaços de nomes. Além dos comentários, os espaços de nomes são os únicos elementos de nível superior num Q# programa e todos os outros elementos têm de residir num espaço de nomes. Cada ficheiro pode conter zero ou mais espaços de nomes e cada espaço de nomes pode abranger vários ficheiros. Q# não suporta espaços de nomes aninhados.

Um bloco de espaço de nomes consiste na palavra-chave namespace, seguido do nome do espaço de nomes e do conteúdo do bloco dentro das chavetas { }. Os nomes dos espaços de nomes consistem numa sequência de um ou mais símbolos legais separados por um ponto (.). Embora os nomes dos espaços de nomes possam conter pontos para uma melhor legibilidade, Q# não suporta referências relativas a espaços de nomes. Por exemplo, dois espaços de nomes e Foo.Bar não estão relacionados Foo e não existe noção de uma hierarquia. Em particular, para uma função Baz definida no , não é possível abrir Foo e, em Foo.Barseguida, aceder a essa função através de Bar.Baz.

Os blocos de espaço de nomes podem conter diretivas abertas , bem como declarações de operação, função e tipo . Estes podem ocorrer por qualquer ordem e são recursivos por predefinição, o que significa que podem ser declarados e utilizados por qualquer ordem e podem chamar-se a si próprios; não é necessário que a declaração de um tipo ou callable preceda a sua utilização.

Abrir Diretivas

Por predefinição, tudo o que for declarado no mesmo espaço de nomes pode ser acedido sem mais qualificações. No entanto, as declarações num espaço de nomes diferente só podem ser utilizadas ao qualificar o respetivo nome com o nome do espaço de nomes a que pertencem ou ao abrir esse espaço de nomes antes de ser utilizado, conforme mostrado no exemplo seguinte.

namespace Microsoft.Quantum.Samples {
    
    open Microsoft.Quantum.Arithmetic; 
    open Microsoft.Quantum.Arrays as Array; 

    // ...
}

O exemplo utiliza uma open diretiva para importar todos os tipos e callables declarados no espaço de nomes Microsoft.Quantum.Artithmetic. Em seguida, podem ser referenciados pelo respetivo nome não qualificado, a menos que esse nome entre em conflito com uma declaração no bloco de espaço de nomes ou noutro espaço de nomes aberto.

Para evitar escrever o nome completo ao mesmo tempo que distingue a origem de determinados elementos, pode definir um nome alternativo, ou alias, que normalmente é mais curto, para um espaço de nomes específico. Neste caso, todos os tipos e callables declarados nesse espaço de nomes podem ser qualificados pelo nome abreviado definido. No exemplo anterior, este é o caso do Microsoft.Quantum.Arrays espaço de nomes. Uma função IndexRange declarada no Microsoft.Quantum.Arrays, por exemplo, pode ser utilizada através Array.IndexRange desse bloco de espaço de nomes.

Quer esteja a abrir um espaço de nomes ou a definir um alias, open as diretivas são válidas apenas na peça de espaço de nomes nesse ficheiro.