Sigil (programmering)

I programmering är en sigil [1] [2]  ett tecken kopplat till ett variabelnamn som anger en datatyp eller omfattning , vanligtvis ett prefix, som i $foovar $är sigilen.

Sigil , från latinets sigillum , som betyder "litet tecken", betyder ett tecken eller en bild som antas ha magisk kraft . [3] Sigils kan användas för att avgränsa namnområden , som har olika egenskaper och beteenden.

Historisk kontext

Användningen av sigils populariserades av programmeringsspråket BASIC . Det mest kända exemplet på en sigil i BASIC är dollartecknet (“ $”) som läggs till namnen på alla strängar . Många dialekter av BASIC använder också andra sigiler (som " %") för att representera heltal , flyttalstal och ibland andra typer.

Larry Wall lade till sigils till sitt programmeringsspråk Perl och emulerade sigils i  kommandoradsskript . I Perl definierar sigils inte datatyper som strängar och heltal, utan mer allmänna kategorier: skalärer ( prefix " $" från  engelsk  skalär ), arrayer ( prefix " @" från  engelsk  matris ), hash (prefix ) “ %”) och  subrutiner (“ &”). Raku - språket använder också hjälpsigiler mellan sigils och variabelnamn, twigils , [4] för att indikera variabla omfattningar. Livliga exempel på kvistar i Raku: “ ^”, används med positionsargument för detta block eller subrutin självdeklarerade i  kroppen av ett block eller subrutin; " ." används med objektattribut (egenskaper och metoder).

I CLIPS har skalära variabler prefixet " ?", och flera variabler (som listor på en nivå) har prefixet " $?".

I Common Lisp är dynamiskt omfångade variabler vanligtvis inneslutna i " *" ("hörselkåpskonvention"). Även om detta bara är en konvention, och det inte alls är nödvändigt att göra det, använder språket självt denna praxis (till exempel *standard-output*). Vissa programmerare omger konstanter med " +".

I CycL föregås variabler av ett " ?"-tecken. [5] Konstanta namn börjar med prefixet " #$" (uttalas "hash dollar"). [6]

I Elixir är sigils former av syntax som börjar med tecknet " ~", vilket gör att du kan deklarera reguljära uttryck, strängliteraler, listor, datum. [7] [8]

I MAPPER (aka BIS) omges namngivna variabler inom triangelparenteser, eftersom strängar och tecken inte kräver citattecken.

I MIRC-skript skrivs identifierare (som returnerar beräknade värden [9] ) med ett " $"-prefix, och variabler skrivs med ett " "-prefix %(både lokalt och globalt). Variabler för binära data av godtycklig storlek har prefixet " &".

I programmeringsspråket MUMPS föregår tecknet " $" systemfunktionsnamn och "speciella variabelnamn" (systemvariabler för åtkomst till exekveringstillstånd). Sigilen " $Z" föregår namnen på icke-standardiserade systemfunktioner. Sigilen " $$" föregår namnen på användardefinierade funktioner. Namnen på subrutiner ( i vissa fall ) och globala variabler (lagrade på disk) börjar med tecknet "^".

I Objective-C är strängliteraler som föregås av " @" instanser av klassen NSStringeller, sedan clang v3.1 / LLVM v4.0, NSNumber, NSArrayeller NSDictionary. Prefixet " @" används också i nyckelorden och @interfaceanvänds i klassdefinitionssyntax. Klasser använder också prefixet " " för att indikera metoder och fält för en instans (objekt), och prefixet " " indikerar medlemmar av en klass (det vill säga en objekttyp). @implementation@end-+

I PHP- språket , som till stor del var inspirerat av Perl, " $" föregår alla variabelnamn. Namn utan detta prefix betraktas som konstanter , funktions- eller klassnamn (eller gränssnitts- eller egenskapsnamn som delar samma namnutrymme som klasser).

PILOT använder " $" för buffertar (strängvariabler), " #" för heltalsvariabler och " *" för etiketter .

Python använder " @" ( pajsyntax) för dekoratörer [10] och " __", ( dunder ) för "privata" klassmedlemmar.

I Ruby har vanliga variabler inte sigils, men globala variabler har prefixet " ", $instansvariabler har prefixet " @" och klassvariabler har prefixet " @@". Ruby använder också (strängt konventionella) suffix sigils: " ?" specificerar en predikatmetod som returnerar ett booleskt värde; " !" indikerar att metoden kan ha en potentiellt oväntad effekt och bör hanteras med försiktighet. [elva]

I Schema , enligt konvention, slutar namnen på procedurer som alltid returnerar ett booleskt värde vanligtvis på " ?". Namnen på procedurer som lagrar värden i delar av förallokerade Scheme-objekt (som par, vektorer eller strängar) slutar vanligtvis på " !".

Standard ML använder prefixet sigil " '" för variabler som refererar till typer. Om sigilen fördubblas, hänvisar den till den typ för vilken jämlikhet definieras. Symbolen " '" kan också förekomma i eller i slutet av variabelnamn, i vilket fall den inte har någon tydlig betydelse.

I Transact-SQL står tecknet " @" före namnet på en lokal variabel eller parameter. Systemvariabler (kända som globala variabler) är markerade med " @@".

I Windows PowerShell , som delvis var inspirerat av Unix-skalet och Perl, börjar variabelnamn med ett " $"-tecken.

I XSLT har variabler och parametrar prefixet " " när de används , även om ingen sigil läggs till $när de definieras i <xsl:param>eller <xsl:variable>i ett attribut . nameDet XSLT-relaterade språket XQuery använder " $" i både definition och användning.

I MEL har variabelnamn prefixet " $" för att skilja dem från funktioner, kommandon och andra identifierare.

Liknande fenomen

Skalvariabler

Unix-skalet och verktyg som Makefiles är " $" en unär operator som översätter en variabels namn till dess innehåll. Trots den yttre likheten är tecknet i detta fall inte en del av namnet, vilket märks genom sin frånvaro i uppdraget. Analogen i  C är referensoperatorn för pekare.

Identifieringskonventioner

Sigils används inte i  Fortran , men alla variabler som börjar med bokstäverna I, J, K, L, M och N är heltal som standard . [12] I Fortran-dokumentationen kallas detta "implicit typning", även om explicit typning alltid är tillgänglig, vilket gör att alla variabler kan deklareras med vilken typ som helst. Valet av IN-intervall följer traditionella variabelnamnkonventioner inom matematik .

Olika programmeringsspråk, inklusive Prolog , Haskell , Ruby och  Go, behandlar identifierare som börjar med en stor bokstav annorlunda än de som börjar med en liten bokstav.

Strapping

Microsoft .NET Common Language Infrastructure (CLI) har ett sätt att undvika variabler i det anropade språket som kan vara nyckelord i det anropande språket, kallat stropping [13] i engelska källor . Ibland görs detta med prefix. Till exempel i  C# kan variabelnamn börja med ett " " prefix @. [14] VB.Net  använder hakparenteser för samma ändamål. [femton]

Ungersk notation

Förknippat med sigils är ungersk notation  , en variabelnamnkonvention som bestämmer typen av en variabel genom att lägga till vissa bokstavsprefix till variabelnamnet. Till skillnad från sigils ger ungersk notation ingen information till kompilatorn; typer måste uttryckligen anges för variabler (såvida inte ett  typavslutande språk används ). Eftersom de flesta standardkompilatorer inte kräver användning av prefix, tillåter detta att fel görs och gör koden utsatt för förvirring på grund av oavsiktlig missbruk. [16]

Bokstavsaffixer

Medan sigils gäller för namn (identifierare), kan liknande prefix och suffix gälla för  literaler , särskilt heltal och strängar, och specificerar antingen hur bokstaven tolkas eller dess datatyp. Till exempel 0x10ULLbehandlas det som värdet 16 med en C++ datatyp unsigned long long:  indikerar att 0xdet är ett hexadecimalt tal, och suffixet ULLindikerar typen. Prefix används ofta för att markera strängar utan tecken escapes . Till exempel r"C:\Windows"i Python skulle en escaped sträng skrivas som "C:\\Windows".

Eftersom det påverkar semantiken (betydelsen) av det bokstavliga, och inte syntaxen eller semantiken för identifieraren (namnet), är det varken stropping (identifierarsyntax) eller sigil (identifieraresemantik), trots syntaktiska likheter.

Java-anteckningar

Till exempel inbyggda Java-anteckningar som . @Override@Deprecated

Förvirring

I vissa fall kan samma syntax användas för olika ändamål, vilket kan orsaka förvirring. Till exempel, i  C# , kan prefixet " " @användas både som en stropping och som ett prefix till en bokstavlig (för att beteckna strängar som inte har undanröjts); i det här fallet är ingendera användningen en sigil eftersom den påverkar syntaxen för identifierare eller semantiken för bokstaver, inte semantiken för identifierare.

Se även

Anteckningar

  1. Vladimir Lettiev. Pragmatic Perl 13: Funktionssignatur i Perl 5.20 . Pragmatic Perl (13 mars 2014). — “... du kan använda en vanlig sigil [...] I det här exemplet är funktionen bara intresserad av det första och det fjärde argumentet. Positionsplatshållare anges för resten av argumenten: sigilerna $ och @, de kommer inte att definieras i funktionen." Hämtad 13 september 2021. Arkiverad från originalet 13 september 2021.
  2. Andrey Shitov. Pragmatic Perl 22: Perl 6 för 2000-talet . Pragmatic Perl (22 december 2014). "Perl 6 använder sigils för variabler som överlappar med Perl 5. I synnerhet använder skalärer, listor och hashs sigilerna $, @ och %." Hämtad 13 september 2021. Arkiverad från originalet 13 september 2021.
  3. Definition av sigil . Collins engelska ordbok . Hämtad 22 maj 2012. Arkiverad från originalet 1 maj 2021.
  4. "Perl 6 variables:Twigils" Arkiverad 17 juni 2016 på Wayback Machine , Perl 6 Dokumentation
  5. Variabler - Cycorp . www.cyc.com . Hämtad 31 december 2017. Arkiverad från originalet 25 januari 2018.
  6. Constants-Cycorp . www.cyc.com . Hämtad 31 december 2017. Arkiverad från originalet 25 januari 2018.
  7. Sigils . Elixir och Wunsh (2020). Hämtad 13 september 2021. Arkiverad från originalet 13 september 2021.
  8. Sigils  . _ elixir-lang.github.com . Hämtad 27 juli 2021. Arkiverad från originalet 2 augusti 2021.
  9. mIRC Hjälp . www.mirc.com . Hämtad 27 juli 2021. Arkiverad från originalet 9 augusti 2021.
  10. PEP 318 - Dekoratörer för funktioner och metoder . Hämtad 9 augusti 2021. Arkiverad från originalet 3 juni 2020.
  11. Svart. Bang metoder; eller, Fara, Will Rubyist! (15 augusti 2007). Arkiverad från originalet den 22 maj 2016.
  12. Regler för datainmatning (FORTRAN 77 språkreferens) . docs.oracle.com . Hämtad 4 augusti 2021. Arkiverad från originalet 25 februari 2021.
  13. King, Peter R., red. (1974-06-18). "(okänt)" . Proceedings of a International Conference on ALGOL 68 Implementation . Institutionen för datavetenskap, University of Manitoba, Winnipeg: University of Manitoba, Institutionen för datavetenskap: 148. ISBN  9780919628113 . Arkiverad från originalet 2021-08-09 . Hämtad 2021-08-09 . Mer allvarliga problem uppstår genom "stropping", tekniken som används för att skilja fetstil från latinsk text. Vissa implementeringar kräver apostrof runt fetstil (därav namnet stropping); andra kräver backsteg och understrykning; […] Utfasad parameter används |deadlink=( hjälp )
  14. C# Nyckelord . MSDN . Hämtad 23 mars 2011. Arkiverad från originalet 28 januari 2017.
  15. sträng (C#-referens) . MSDN . Hämtad 23 mars 2011. Arkiverad från originalet 14 mars 2011.
  16. Linux-kärnkodningsstil Arkiverad 9 augusti 2021 på Wayback Machine , av Linus Torvalds