V programování je sigil [1] [2] znak připojený ke jménu proměnné označující datový typ nebo rozsah , obvykle předpona, jako $fookde $je sigil.
Sigil , z latinského sigillum , což znamená „malé znamení“, znamená znamení nebo obraz údajně magické síly . [3] Sigils lze použít k vymezení jmenných prostorů , které mají různé vlastnosti a chování.
Použití sigils bylo popularizováno programovacím jazykem BASIC . Nejznámějším příkladem sigil v BASICu je znak dolaru (“ $”) přidaný k názvům všech řetězců . Mnoho dialektů BASICu také používá jiná sigila (například " %") k reprezentaci celých čísel , čísel s pohyblivou řádovou čárkou a někdy i jiných typů.
Larry Wall přidal sigily do svého programovacího jazyka Perl a emuloval sigily ve skriptování z příkazové řádky . V Perlu sigily nedefinují datové typy, jako jsou řetězce a celá čísla, ale obecnější kategorie: skaláry ( předpona " $" z anglického skalár ), pole ( předpona " @" z anglického pole ), hash ( předpona „ %“) a podprogramy („ &“). Jazyk Raku také používá pomocná sigila mezi sigily a názvy proměnných, twigils , [4] k označení rozsahu proměnných. Živé příklady twigilů v Raku: „ ^“, používané s pozičními argumenty tohoto bloku nebo podprogramu, které jsou deklarovány v těle bloku nebo podprogramu; " ." používá se s atributy objektu (vlastnosti a metody).
V CLIPS mají skalární proměnné předponu " ?" a více proměnných (například jednoúrovňové seznamy) předponu " $?".
V Common Lisp jsou proměnné s dynamickým rozsahem obvykle uzavřeny v " *" ("konvence chráničů sluchu"). Přestože se jedná pouze o konvenci a není to vůbec nutné, jazyk sám tuto praxi používá (například *standard-output*). Někteří programátoři uzavírají konstanty " +".
V CycL předchází proměnným ?znak " ". [5] Názvy konstant začínají předponou " #$" (vyslovuje se "hash dollar"). [6]
V Elixir jsou sigily formy syntaxe, které začínají znakem " ~", což vám umožňuje deklarovat regulární výrazy, řetězcové literály, seznamy, data. [7] [8]
V MAPPER (aka BIS) jsou pojmenované proměnné uzavřeny v trojúhelníkových závorkách, protože řetězce a znaky nevyžadují uvozovky.
Ve skriptech MIRC se identifikátory (které vracejí vypočítané hodnoty [9] ) zapisují s $předponou „ “ a proměnné se zapisují s předponou „ “ %(lokální i globální). Proměnné pro binární data libovolné velikosti mají předponu " &".
V programovacím jazyce MUMPS znak " $" předchází názvy systémových funkcí a "názvy speciálních proměnných" (systémové proměnné pro přístup ke stavu provádění). Znak " $Z" předchází názvy nestandardních systémových funkcí. Znak " $$" předchází názvy funkcí definovaných uživatelem. Názvy podprogramů ( v některých případech ) a globálních proměnných (uložených na disku) začínají znakem "^".
V Objective-C jsou řetězcové literály před " @" instancemi třídy NSStringnebo, od clang v3.1 / LLVM v4.0 NSNumber, NSArraynebo NSDictionary. Předpona " @" se také používá v klíčových slovech @interfacea @implementationpoužívá @endse v syntaxi definice třídy. Třídy také používají -předponu „ “ k označení metod a polí instance (objektu) a +předpona „ “ označuje členy třídy (tj. typ objektu).
V jazyce PHP , který byl z velké části inspirován Perlem, $předchází všechny názvy proměnných. Názvy bez této předpony jsou považovány za konstanty , názvy funkcí nebo tříd (nebo názvy rozhraní nebo vlastností , které sdílejí stejný jmenný prostor jako třídy).
PILOT používá " $" pro buffery (řetězcové proměnné), " #" pro celočíselné proměnné a " *" pro štítky .
Python používá " @" ( koláčová syntaxe) pro dekorátory [10] a " __", ( dunder ) pro "soukromé" členy třídy.
V Ruby nemají běžné proměnné sigila, ale globální proměnné mají předponu " ", $proměnné instance mají předponu " @" a proměnné třídy mají předponu " @@". Ruby také používá (přísně konvenční) příponové sigily: " ?" určuje predikátovou metodu, která vrací booleovskou hodnotu; " !" znamená, že metoda může mít potenciálně neočekávaný účinek a je třeba s ní zacházet opatrně. [jedenáct]
Ve schématu podle konvence názvy procedur, které vždy vracejí booleovskou hodnotu, obvykle končí na " ?". Názvy procedur, které ukládají hodnoty do částí předem přidělených objektů Scheme (jako jsou páry, vektory nebo řetězce), obvykle končí na „ !“.
Standardní ML používá prefix sigil " '" pro proměnné, které odkazují na typy. Pokud je sigil zdvojený, odkazuje na typ, pro který je rovnost definována. Symbol " '" se také může objevit uvnitř nebo na konci názvů proměnných, v takovém případě nemá jasný význam.
V Transact-SQL předchází znak " @" název lokální proměnné nebo parametru. Systémové proměnné (známé jako globální proměnné) jsou označeny " @@".
V prostředí Windows PowerShell , které bylo částečně inspirováno unixovým shellem a Perlem, začínají názvy proměnných znakem " $".
V XSLT mají proměnné a parametry při použití předponu " " , ačkoliv se nepřidává žádné sigil , $když je definováno v atributu <xsl:param>nebo <xsl:variable>v atributu . nameJazyk XQuery související s XSLT používá " $" jak v definici, tak v použití.
V MEL mají názvy proměnných předponu " $", aby se odlišily od funkcí, příkazů a dalších identifikátorů.
V unixovém shellu a nástrojích jako Makefiles je " $" unární operátor , který převádí název proměnné do jejího obsahu. Přes vnější podobnost znak v tomto případě není součástí jména, což je patrné jeho nepřítomností v zadání. Analog v C je dereferenční operátor ukazatelů.
Sigils se ve Fortranu nepoužívají, ale všechny proměnné začínající písmeny I, J, K, L, M a N jsou standardně celá čísla. [12] V dokumentaci Fortranu se tomu říká „implicitní typování“, ačkoli explicitní typování je vždy k dispozici, což umožňuje deklarovat jakoukoli proměnnou s jakýmkoli typem. Volba rozsahu IN se řídí tradičními konvencemi pro pojmenování proměnných v matematice .
Různé programovací jazyky, včetně Prolog , Haskell , Ruby a Go, zacházejí s identifikátory začínajícími velkým písmenem jinak než s těmi, které začínají malým písmenem.
Microsoft .NET Common Language Infrastructure (CLI) má způsob escapování proměnných v volaném jazyce, které mohou být klíčovými slovy v volajícím jazyce, v anglických zdrojích nazývaný stropping [13] . Někdy se to provádí pomocí předpon. Například v C# mohou názvy proměnných začínat " " prefixem @. [14] VB.Net používá pro stejný účel hranaté závorky . [patnáct]
Se sigily je spojena maďarská notace , konvence pojmenování proměnných , která určuje typ proměnné přidáním určitých písmenných předpon k názvu proměnné. Na rozdíl od sigilů neposkytuje maďarská notace žádné informace kompilátoru; typy musí být explicitně specifikovány pro proměnné (pokud není použit jazyk odvozující typ ). Protože většina standardních kompilátorů nenařizuje použití prefixů, umožňuje to dělat chyby a kód je náchylný k záměně kvůli náhodnému zneužití. [16]
Zatímco sigila se vztahují na jména (identifikátory), podobné předpony a přípony se mohou vztahovat na literály , zejména na celá čísla a řetězce, určující buď způsob interpretace literálu nebo jeho datový typ. Například se s ní 0x10ULLzachází jako s hodnotou 16 s datovým typem C++ unsigned long long: označuje , že 0xse jedná o šestnáctkové číslo, a přípona ULLoznačuje typ. Předpony se často používají k označení řetězců bez znaku escape . Například r"C:\Windows"v Pythonu by se uniklý řetězec zapsal jako "C:\\Windows".
Protože ovlivňuje sémantiku (význam) literálu, a nikoli syntaxi nebo sémantiku identifikátoru (jména), není to ani stropping (syntaxe identifikátoru) ani sigil (sémantika identifikátoru), navzdory syntaktickým podobnostem.
Například vestavěné anotace Java , jako @Overrideje @Deprecated.
V některých případech může být stejná syntaxe použita pro různé účely, což může způsobit zmatek. Například v C# lze předponu " " @použít jak jako stropování, tak jako předponu k doslovu (k označení řetězců bez znaku zvláštního znaku); v tomto případě není ani jedno použití sigilem, protože ovlivňuje syntaxi identifikátorů nebo sémantiku literálů, nikoli sémantiku identifikátorů.