A programozásban a jel [1] [2] egy változónévhez csatolt karakter, amely egy adattípust vagy hatókört jelöl , általában egy előtag, például $foohol $van a jel.
A Sigil , a latin sigillum szóból , jelentése "kis jel", olyan jelet vagy képet jelent, amely feltételezhetően mágikus erővel rendelkezik . [3] A jelek használhatók névterek elhatárolására , amelyek eltérő tulajdonságokkal és viselkedéssel rendelkeznek.
A jelek használatát a BASIC programozási nyelv tette népszerűvé . A BASIC jelképének leghíresebb példája az összes karakterlánc nevéhez hozzáadott dollárjel („ ”) . A BASIC számos dialektusa más jeleket is használ (például " ") egész számok , lebegőpontos számok és néha más típusok ábrázolására. $%
Larry Wall jeleket adott a Perl programozási nyelvéhez , emulálva a jeleket a parancssori szkriptekben . A Perlben a sigilek nem adattípusokat határoznak meg, például karakterláncokat és egész számokat, hanem általánosabb kategóriákat: skalárok ( " $" előtag az angol skalárból ), tömbök ( " @" előtag az angol tömbből ), hashek (előtag " %" és szubrutinok (" &"). A Raku nyelv segédszigileket is használ a jelek és a változónevek között, twigils , [4] a változók hatókörének jelzésére. Élénk példák a twigil-ekre a Raku nyelven: „ ^”, a blokk vagy szubrutin pozicionálási argumentumaival együtt használatos, amelyek önmeghatározódtak egy blokk vagy alprogram törzsében ; " ." objektum attribútumokkal (tulajdonságok és metódusok) használatos.
A CLIPS -ben a skalárváltozók előtagja a " ?", a több változó (például az egyszintű listák) pedig a " $?" előtag.
A Common Lisp -ben a dinamikus hatókörű változók általában a " *" ("fülvédő konvenció") közé vannak zárva. Bár ez csak konvenció, és egyáltalán nem szükséges, maga a nyelv használja ezt a gyakorlatot (például *standard-output*). Egyes programozók a konstansokat " +" jellel zárják.
A CycL-ben a változókat " ?" jel előzi meg. [5] Az állandó nevek a " " előtaggal kezdődnek #$(ezt "hash dollár"-nak ejtik). [6]
Az Elixirben a jelek a szintaxis olyan formái, amelyek " " karakterrel kezdődnek ~, lehetővé téve reguláris kifejezések, karakterlánc-literálok, listák és dátumok deklarálását. [7] [8]
A MAPPER-ben (más néven BIS) a megnevezett változók háromszög zárójelben vannak, mivel a karakterláncok és karakterek nem igényelnek idézőjeleket.
A MIRC szkriptekben az azonosítók (amelyek kiszámított értékeket adnak vissza [9] ) „ ” előtaggal, a változók pedig „ ” előtaggal (lokális és globális) $íródnak . %A tetszőleges méretű bináris adatok változói előtt " &" szerepel.
A MUMPS programozási nyelvben a " " karakter $megelőzi a rendszerfüggvényneveket és a "speciális változóneveket" (a végrehajtási állapot eléréséhez szükséges rendszerváltozók). A " $Z" jel előzi meg a nem szabványos rendszerfüggvények nevét. A " $$" jel előzi meg a felhasználó által definiált függvények nevét. Az alprogramok ( egyes esetekben ) és a globális változók (lemezen tárolt) neve a "^" karakterrel kezdődik.
Az Objective-C- ben a " " jel előtt álló karakterlánc-literálok @az osztály példányai, NSStringvagy mivel clang v3.1 / LLVM v4.0, NSNumber, NSArrayvagy NSDictionary. A " " előtag @a kulcsszavakban is szerepel @interface, @implementationés @endaz osztálydefiníciós szintaxisban is használatos. Az osztályok a „ -” előtagot is használják egy példány (objektum) metódusainak és mezőinek jelzésére, a „ +” előtag pedig egy osztály (vagyis egy objektumtípus) tagjait jelöli.
A PHP nyelvben , amelyet nagyrészt a Perl ihletett, a " $" minden változónév előtt áll. Az előtag nélküli neveket konstansoknak , függvény- vagy osztályneveknek tekintjük (vagy olyan interfész- vagy jellemzőneveknek , amelyek ugyanazt a névteret osztják meg, mint az osztályok).
A PILOT a " $" kódot használja a pufferekhez (karakterláncváltozókhoz), a " #" értéket az egész változókhoz és a " *" kódot a címkékhez .
A Python a " @" ( pie szintaxist) használja a dekorátorokhoz [10] és a " __", ( dunder ) a "privát" osztály tagjaihoz.
A Rubyban a reguláris változóknak nincs jele, de a globális változók előtt " ", a példányváltozók $előtt " @", az osztályváltozók előtt pedig " @@" szerepel. A Ruby (szigorúan hagyományos) utótag jeleket is használ: " ?" egy predikátum metódust ad meg, amely logikai értéket ad vissza; A " !" azt jelzi, hogy a módszer potenciálisan váratlan hatással járhat, ezért óvatosan kell kezelni. [tizenegy]
A Scheme programban megegyezés szerint azoknak az eljárásoknak a neve, amelyek mindig logikai értéket adnak vissza, általában " ?" karakterre végződnek. Azokat az eljárásokat, amelyek az előre lefoglalt sémaobjektumok (például párok, vektorok vagy karakterláncok) részeiben tárolnak értékeket, általában " !" karakterre végződnek.
A szabványos ML a " " előtagot használja 'a típusokra hivatkozó változókhoz. Ha a jelet megduplázzuk, az arra a típusra utal, amelyre az egyenlőség definiálva van. A " " szimbólum 'megjelenhet a változónevek belsejében vagy végén is, ebben az esetben nincs egyértelmű jelentése.
A Transact-SQL-ben a " " karakter @megelőzi egy helyi változó vagy paraméter nevét. A rendszerváltozók (globális változókként ismertek) " @@" jelzéssel vannak megjelölve.
A részben a Unix shell és a Perl által ihletett Windows PowerShellben a változónevek " " karakterrel kezdődnek. $
Az XSLT -ben a változók és paraméterek "" előtaggal vannak ellátva , habár az attribútumban vagy az attribútumban $megadva nem adunk hozzá jelet . Az XSLT-vel kapcsolatos nyelv , az XQuery a " " karaktert használja mind a definícióban, mind a használatban. <xsl:param><xsl:variable>name$
A MEL-ben a változónevek elé " $" kerül, hogy megkülönböztesse őket a függvényektől, parancsoktól és egyéb azonosítóktól.
A Unix shellben és olyan segédprogramokban, mint a Makefiles , a " $" egy unáris operátor , amely a változó nevét a tartalommá fordítja. A külső hasonlóság ellenére a jel ebben az esetben nem része a névnek, ami észrevehető a hozzárendelésben való hiánya miatt. A C analógja a mutatók hivatkozás megszüntető operátora .
A Fortran nem használja a jeleket, de az I, J, K, L, M és N betűkkel kezdődő változók alapértelmezés szerint egész számok . [12] A Fortran dokumentációjában ezt "implicit tipizálásnak" nevezik, bár az explicit gépelés mindig elérhető, lehetővé téve bármely változó bármilyen típussal történő deklarálását. Az IN tartomány kiválasztása a hagyományos matematikai változó-elnevezési konvenciókat követi .
Különböző programozási nyelvek, köztük a Prolog , a Haskell , a Ruby és a Go, másként kezelik a nagybetűvel kezdődő azonosítókat , mint a kisbetűkkel kezdődőket.
A Microsoft .NET Common Language Infrastructure (CLI) módot kínál arra, hogy a hívott nyelvben olyan változókat szöktessen meg, amelyek kulcsszavak lehetnek a hívó nyelvben, angol nyelvű forrásokban stropping [13] néven . Néha ez előtagokkal történik. Például a C# nyelvben a változónevek " " előtaggal kezdődhetnek @. [14] A VB.Net ugyanerre a célra szögletes zárójeleket használ . [tizenöt]
A jelekhez kapcsolódik a magyar jelölés , egy változó elnevezési konvenció , amely úgy határozza meg a változó típusát, hogy bizonyos betűelőtagokat ad a változó nevéhez. A magyar jelölés a jelekkel ellentétben nem ad információt a fordítónak; a típusokat kifejezetten meg kell adni a változókhoz (kivéve, ha típuskövetkeztető nyelvet használunk ). Mivel a legtöbb szabványos fordítóprogram nem írja elő az előtagok használatát, ez lehetővé teszi a hibák elkövetését, és a kódot hajlamossá teszi a véletlen visszaélések miatti összekeverésre. [16]
Míg a jelek a nevekre (azonosítókra) vonatkoznak, hasonló előtagok és utótagok vonatkozhatnak a literálokra , különösen az egész számokra és a karakterláncokra, amelyek meghatározzák a literál értelmezésének módját vagy az adattípusát. Például 0x10ULL16-os értékként kezeljük C++ adattípus esetén unsigned long long: azt jelzi , 0xhogy hexadecimális számról van szó, az utótag ULLpedig a típust. Az előtagokat gyakran használják a karakterláncok megjelölésére karakterek kihagyása nélkül . Például r"C:\Windows"a Pythonban egy megtisztított karakterláncot a következőképpen írnak ki "C:\\Windows".
Mivel a literál szemantikáját (jelentését) érinti, és nem az azonosító (név) szintaxisát vagy szemantikáját, ezért a szintaktikai hasonlóságok ellenére sem nem csíkozás (azonosító szintaxis), sem szigil (azonosító szemantika).
Például a beépített Java annotációk , mint @Overridepl @Deprecated.
Bizonyos esetekben ugyanaz a szintaxis különböző célokra használható, ami zavart okozhat. Például a C# nyelvben a " " előtag @használható kivágásként és literál előtagjaként is (a nem megtisztított karakterláncok jelölésére); ebben az esetben egyik használat sem szigil, mert az azonosítók szintaxisát vagy a literálok szemantikáját érinti, nem pedig az azonosítók szemantikáját.