Namespaces (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.
Nota
Se non si dichiara in modo esplicito uno spazio dei nomi, il Q# compilatore usa il nome file come nome dello spazio dei nomi.
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 di importazione, operazioni, funzioni e dichiarazioni di tipo . Questi elementi possono verificarsi in qualsiasi ordine e sono ricorsivi per impostazione predefinita, ovvero possono essere dichiarati e usati in qualsiasi ordine e possono chiamarsi stessi. Non è necessario che la dichiarazione di un tipo o sia chiamabile per precederne l'uso.
Direttive Import
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 {
import Microsoft.Quantum.Arithmetic.*;
import Microsoft.Quantum.Arrays.* as Array;
// ...
}
Nota
Per gli spazi dei nomi nella libreria standard Q# , la radice dello spazio dei nomi può essere semplificata in Std
. Ad esempio, l'esempio precedente può essere riscritto come segue:
import Std.Arithmetic.*;
import Std.Arrays.* as Array;
Nell'esempio viene usata una import
direttiva per importare tutti i tipi e i chiamabili dichiarati nello spazio dei Microsoft.Quantum.Arithmetic
nomi . È quindi possibile farvi riferimento in base al nome non qualificato, a meno che tale nome non sia in conflitto con una dichiarazione nel blocco dello spazio dei nomi o in un altro spazio dei nomi aperto.
Per evitare di digitare il nome completo pur distinguendo la provenienza di determinati elementi, è possibile definire un nome alternativo o un alias per uno spazio dei nomi specifico. In questo caso, è possibile qualificare tutti i tipi e i chiamabili dichiarati in tale spazio dei nomi in base al nome breve definito.
Nell'esempio precedente viene usato un alias per lo spazio dei Microsoft.Quantum.Arrays
nomi . È quindi possibile usare la funzione IndexRange
, dichiarata in Microsoft.Quantum.Arrays
, ad esempio tramite Array.IndexRange
all'interno del blocco dello spazio dei nomi.
Indipendentemente dal fatto che si stia aprendo uno spazio dei nomi o definendo un alias, import
le direttive sono valide solo nella parte dello spazio dei nomi in tale file.