Obory názvů

Na nejvyšší úrovni Q# se program skládá ze sady oborů názvů. Kromě komentářů jsou obory názvů jedinými prvky nejvyšší úrovně v Q# programu a všechny ostatní prvky se musí nacházet v oboru názvů. Každý soubor může obsahovat nula nebo více oborů názvů a každý obor názvů může zahrnovat více souborů. Q# nepodporuje vnořené obory názvů.

Blok oboru názvů se skládá z klíčového slova namespace, za kterým následuje název oboru názvů a obsah bloku uvnitř složených závorek { }. Názvy oborů názvů se skládají z posloupnosti jednoho nebo více právních symbolů oddělených tečkou (.). Přestože názvy oborů názvů mohou obsahovat tečky pro lepší čitelnost, Q# nepodporuje relativní odkazy na obory názvů. Například dva obory Foo názvů a Foo.Bar spolu nesouvisejí a neexistuje žádná hierarchie. Konkrétně u funkce Baz definované v Foo.Barnení možné tuto funkci otevřít Foo a pak k ní přistupovat přes Bar.Baz.

Bloky oboru názvů mohou obsahovat direktivy open i deklarace operací, funkcí a typů . Tyto mohou nastat v libovolném pořadí a jsou ve výchozím nastavení rekurzivní, což znamená, že mohou být deklarovány a použity v libovolném pořadí a mohou se volat; není nutné, aby deklarace typu nebo volatelného typu předcházela jeho použití.

Open – direktivy

Ve výchozím nastavení je možné přistupovat ke všemu deklarovanému v rámci stejného oboru názvů bez další kvalifikace. Deklarace v jiném oboru názvů však lze použít pouze tak, že se jejich název kvalifikuje názvem oboru názvů, do kterého patří, nebo otevřením tohoto oboru názvů před použitím, jak je znázorněno v následujícím příkladu.

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

    // ...
}

Příklad používá direktivu open k importu všech typů a volatelných objektů deklarovaných v oboru názvů Microsoft.Quantum.Artithmetic. Poté mohou být odkazovány svým nekvalifikovaným názvem, pokud tento název není v konfliktu s deklarací v bloku oboru názvů nebo jiném otevřeném oboru názvů.

Pokud se chcete vyhnout zadávání celého názvu a přitom stále rozlišovat, odkud určité prvky pocházejí, můžete pro určitý obor názvů definovat alternativní název neboli alias, který je obvykle kratší. V tomto případě mohou být všechny typy a volatelné typy deklarované v tomto oboru názvů místo toho kvalifikovány definovaným krátkým názvem. V předchozím příkladu je to případ Microsoft.Quantum.Arrays oboru názvů . Funkci IndexRange deklarovanou například v Microsoft.Quantum.Arrayssouboru je možné použít v Array.IndexRange rámci daného bloku oboru názvů.

Ať už otevíráte obor názvů nebo definujete alias, open jsou direktivy platné pouze v celé části oboru názvů v daném souboru.