Sigil (programování)

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í.

Historický kontext

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ů.

Podobné jevy

Proměnné shellu

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ů.

Konvence identifikátorů

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 , RubyGo, 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.

Páskování

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]

Maďarská notace

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]

Dopisy připojené

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.

Java anotace

Například vestavěné anotace Java , jako @Overrideje @Deprecated.

Zmatek

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ů.

Viz také

Poznámky

  1. Vladimír Lettiev. Pragmatic Perl 13: Signatura funkce v Perlu 5.20 . Pragmatický Perl (13. března 2014). — „... můžete použít běžné sigil [...] V tomto příkladu se funkce zajímá pouze o první a čtvrtý argument. Zástupné symboly pozic jsou určeny pro zbytek argumentů: sigily $ a @, nebudou definovány uvnitř funkce.". Získáno 13. září 2021. Archivováno z originálu dne 13. září 2021.
  2. Andrej Šitov. Pragmatický Perl 22: Perl 6 pro 21. století . Pragmatic Perl (22. prosince 2014). "Perl 6 používá sigily pro proměnné, které se překrývají s Perlem 5. Zejména skaláry, seznamy a hashe používají sigily $, @ a %." Získáno 13. září 2021. Archivováno z originálu dne 13. září 2021.
  3. Definice sigila . Collins anglický slovník . Získáno 22. května 2012. Archivováno z originálu 1. května 2021.
  4. "Perl 6 variables:Twigils" Archivováno 17. června 2016 na Wayback Machine , dokumentace Perl 6
  5. Proměnné - Cycorp . www.cyc.com . Získáno 31. prosince 2017. Archivováno z originálu 25. ledna 2018.
  6. Konstanty-Cycorp . www.cyc.com . Získáno 31. prosince 2017. Archivováno z originálu 25. ledna 2018.
  7. Sigils . Elixír a Wunsh (2020). Získáno 13. září 2021. Archivováno z originálu dne 13. září 2021.
  8. Sigils  _ _ elixir-lang.github.com . Získáno 27. července 2021. Archivováno z originálu dne 2. srpna 2021.
  9. Nápověda mIRC . www.mirc.com . Získáno 27. července 2021. Archivováno z originálu dne 9. srpna 2021.
  10. PEP 318 -- Dekorátoři pro funkce a metody . Získáno 9. srpna 2021. Archivováno z originálu dne 3. června 2020.
  11. Černá. Bangovy metody; nebo, Nebezpečí, Will Rubyist! (15. srpna 2007). Archivováno z originálu 22. května 2016.
  12. Pravidla pro typování dat (FORTRAN 77 Language Reference) . docs.oracle.com . Získáno 4. srpna 2021. Archivováno z originálu dne 25. února 2021.
  13. King, Peter R., ed. (1974-06-18). „(neznámý)“ . Sborník příspěvků z mezinárodní konference o implementaci ALGOL 68 . Department of Computer Science, University of Manitoba, Winnipeg: University of Manitoba, Department of Computer Science: 148. ISBN  9780919628113 . Archivováno z originálu dne 2021-08-09 . Staženo 2021-08-09 . Závažnější problémy představuje „vyřezávání“, technika používaná k rozlišení textu tučného písma od latinského textu. Některé implementace vyžadují apostrofy kolem tučného písma (odtud název stropping); jiné vyžadují zpětné mezery a podtržení; […] Použitý zastaralý parametr |deadlink=( nápověda )
  14. Klíčová slova C# . MSDN . Získáno 23. března 2011. Archivováno z originálu 28. ledna 2017.
  15. řetězec (C# Reference) . MSDN . Získáno 23. března 2011. Archivováno z originálu 14. března 2011.
  16. Styl kódování linuxového jádra Archivováno 9. srpna 2021 na Wayback Machine od Linuse Torvaldse