Share via


Spazi dei nomi

A livello generale, un programma Q# è costituito da un set di spazi dei nomi. Oltre ai commenti, gli spazi dei nomi sono gli unici elementi di primo livello in un programma Q# e tutti gli altri elementi devono risiedere all'interno di uno spazio dei nomi. Ogni file può contenere zero o più spazi dei nomi e ogni spazio dei nomi può riguardare più file. Q# non supporta spazi dei nomi annidati.

Un blocco dello spazio dei nomi è costituito dalla parola chiave namespace, seguita dal nome dello spazio dei nomi e dal contenuto del blocco tra parentesi graffe { }. I nomi degli spazi dei nomi sono costituiti da una sequenza di uno o più simboli legali separati da un punto (.). Anche se i nomi degli spazi dei nomi possono contenere punti per una migliore leggibilità, Q# non supporta riferimenti relativi agli spazi dei nomi. Ad esempio, due spazi dei nomi Foo e Foo.Bar non sono correlati e non esiste alcuna nozione di gerarchia. In particolare, per una funzione Baz definita in Foo.Bar, non è possibile aprire Foo e quindi accedere a tale funzione tramite Bar.Baz.

I blocchi dello spazio dei nomi possono contenere direttive aperte , nonché dichiarazioni di operazioni, funzioni e tipi . Queste possono presentarsi in qualsiasi ordine e sono ricorsive per impostazione predefinita. Questo significa che possono essere dichiarate e usate in qualsiasi ordine e possono chiamare se stesse. Non è necessario che la dichiarazione di un tipo o di un oggetto chiamabile ne preceda l'uso.

Direttive open

Per impostazione predefinita, tutti gli elementi dichiarati all'interno dello stesso spazio dei nomi sono accessibili senza ulteriore qualifica. Le dichiarazioni in uno spazio dei nomi diverso possono però essere usate solo qualificandone il nome con il nome dello spazio dei nomi a cui appartengono oppure aprendo tale spazio dei nomi prima che venga usato, come illustrato nell'esempio seguente.

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

    // ...
}

Nell'esempio viene usata una direttiva open per importare tutti i tipi e gli oggetti chiamabili dichiarati nello spazio dei nomi Microsoft.Quantum.Arithmetic. È quindi possibile fare riferimento a tali nomi con il nome non qualificato, a meno che tale nome non sia in conflitto con una dichiarazione nel blocco dello spazio dei nomi o con un altro spazio dei nomi aperto.

Per evitare di digitare il nome completo pur distinguendo da dove provengono determinati elementi, per uno spazio dei nomi specifico è possibile definire un nome alternativo, o alias, che è in genere più breve. In questo caso, tutti i tipi e gli oggetti chiamabili dichiarati in tale spazio dei nomi possono essere qualificati dal nome breve definito. Nell'esempio precedente si tratta dello spazio dei nomi Microsoft.Quantum.Arrays. Una funzione IndexRange, dichiarata in Microsoft.Quantum.Arrays, può ad esempio essere usata tramite Array.IndexRange all'interno di tale blocco dello spazio dei nomi.

Indipendentemente dal fatto che si stia aprendo uno spazio dei nomi o definendo un alias, open le direttive sono valide solo nella parte dello spazio dei nomi in tale file.