În programare , un sigiliu [1] [2] este un caracter atașat unui nume de variabilă care denotă un tip de date sau un domeniu de aplicare , de obicei un prefix, ca în $foocazul în care $este sigilul.
Sigil , din latinescul sigillum , care înseamnă „semn mic”, înseamnă un semn sau o imagine presupusă a puterii magice . [3] Sigilurile pot fi folosite pentru a delimita spațiile de nume , care au proprietăți și comportamente diferite.
Utilizarea simbolurilor a fost popularizată de limbajul de programare BASIC . Cel mai faimos exemplu de sigiliu în BASIC este semnul dolar („ $”) adăugat la numele tuturor șirurilor . Multe dialecte ale BASIC folosesc și alte simboluri (cum ar fi „ %„) pentru a reprezenta numere întregi , numere în virgulă mobilă și, uneori, alte tipuri.
Larry Wall a adăugat simboluri în limbajul său de programare Perl , emulând simbolurile în scripturile din linia de comandă . În Perl, sigilurile nu definesc tipuri de date precum șiruri de caractere și numere întregi, ci categorii mai generale: scalari ( prefix " $" din engleză scalar ), matrice ( prefix " @" din engleză array ), hash ( prefix " " din engleză scalar ), „ %”) și subrutinele (“ &”). Limbajul Raku folosește și simboluri auxiliare între simboluri și nume variabile, twigils , [4] pentru a indica domeniile variabile. Exemple vii de twigils în Raku: „ ^”, folosit cu argumentele poziționale ale acestui bloc sau subrutine autodeclarate în corpul unui bloc sau subrutine; „ .” folosit cu atributele obiectului (proprietăți și metode).
În CLIPS , variabilele scalare sunt prefixate cu " ?", iar mai multe variabile (cum ar fi listele cu un singur nivel) sunt prefixate cu " $?".
În Common Lisp , variabilele dinamice sunt de obicei incluse în „ *” („convenția căștilor pentru urechi”). Deși aceasta este doar o convenție și nu este deloc necesar să se facă acest lucru, limbajul în sine folosește această practică (de exemplu, *standard-output*). Unii programatori includ constantele cu " +".
În CyclL, variabilele sunt precedate de ?semnul " ". [5] Numele constante încep cu prefixul „ #$” (pronunțat „dolar hash”). [6]
În Elixir , sigilurile sunt forme de sintaxă care încep cu caracterul " ~", permițându-vă să declarați expresii regulate, literale șiruri, liste, date. [7] [8]
În MAPPER (alias BIS), variabilele numite sunt incluse între paranteze triunghiulare, deoarece șirurile și caracterele nu necesită ghilimele.
În scripturile MIRC , identificatorii (care returnează valori calculate [9] ) sunt scriși cu un $prefix „ ” iar variabilele sunt scrise cu un prefix „ ” %(atât local, cât și global). Variabilele pentru date binare de mărime arbitrară sunt prefixate cu " &".
În limbajul de programare MUMPS , caracterul „ $” precede numele funcțiilor sistemului și „numele variabilelor speciale” (variabilele de sistem pentru accesarea stării de execuție). Sigilul „ $Z” precede denumirile funcțiilor de sistem non-standard. Sigilul „ $$” precede numele funcțiilor definite de utilizator. Numele subrutinelor ( în unele cazuri ) și variabilelor globale (stocate pe disc) încep cu caracterul „^”.
În Objective-C , literalele șir precedate de „ @” sunt instanțe ale clasei NSStringsau, deoarece clang v3.1 / LLVM v4.0 NSNumber, NSArraysau NSDictionary. Prefixul „ @” este folosit și în cuvintele cheie și @interfaceîn sintaxa definiției clasei. Clasele folosesc, de asemenea, prefixul „ ” pentru a indica metode și câmpuri ale unei instanțe (obiect), iar prefixul „ ” indică membrii unei clase (adică un tip de obiect). @implementation@end-+
În limbajul PHP , care a fost în mare parte inspirat de Perl, „ $” precede toate numele variabilelor. Numele fără acest prefix sunt considerate constante , nume de funcții sau clase (sau nume de interfețe sau trăsături care au același spațiu de nume ca și clasele).
PILOT folosește „ $” pentru buffer-uri (variabile șir), „ #” pentru variabile întregi și „ *” pentru etichete .
Python folosește " @" ( sintaxa plăcintă) pentru decoratori [10] și " __", ( dunder ) pentru membrii clasei „private”.
În Ruby , variabilele obișnuite nu au simboluri, dar variabilele globale sunt prefixate cu " ", $variabilele de instanță sunt prefixate cu " @", iar variabilele de clasă sunt prefixate cu " @@". Ruby folosește și simboluri sufixe (strict convenționale): " ?" specifică o metodă de predicat care returnează o valoare booleană ; „ !” indică faptul că metoda poate avea un efect potențial neașteptat și trebuie tratată cu grijă. [unsprezece]
În Scheme , prin convenție, numele procedurilor care returnează întotdeauna o valoare booleană se termină de obicei în " ?". Numele procedurilor care stochează valori în părți ale obiectelor Scheme prealocate (cum ar fi perechi, vectori sau șiruri de caractere) se termină de obicei cu „ !„.
ML standard utilizează prefixul sigiliu „ '” pentru variabilele care se referă la tipuri. Dacă sigilul este dublat, se referă la tipul pentru care este definită egalitatea. Simbolul „ '” poate apărea și în interiorul sau la sfârșitul numelor de variabile, caz în care nu are o semnificație clară.
În Transact-SQL, caracterul „ @” precede numele unei variabile locale sau al unui parametru. Variabilele de sistem (cunoscute ca variabile globale) sunt marcate cu " @@".
În Windows PowerShell , care a fost parțial inspirat de shell-ul Unix și Perl, numele variabilelor încep cu un $caracter " ".
În XSLT , variabilele și parametrii sunt prefixați cu „ ” atunci când sunt utilizați , deși nu este adăugat niciun simbol $atunci când sunt definiți în <xsl:param>sau <xsl:variable>într-un atribut . nameLimbajul XSLT XQuery folosește „ $” atât în definiție, cât și în utilizare.
În MEL, numele variabilelor sunt prefixate cu „ $” pentru a le distinge de funcții, comenzi și alți identificatori.
În shell-ul Unix și în utilități precum Makefiles , „ $” este un operator unar care traduce numele unei variabile în conținutul acesteia. În ciuda asemănării externe, semnul în acest caz nu face parte din nume, ceea ce se observă prin absența sa în sarcină. Analogul din C este operatorul de dereferențiere al pointerilor.
Sigilurile nu sunt folosite în Fortran , dar toate variabilele care încep cu literele I, J, K, L, M și N sunt în mod implicit numere întregi. [12] În documentația Fortran, aceasta se numește „tastare implicită”, deși tastarea explicită este întotdeauna disponibilă, permițând declararea oricărei variabile cu orice tip. Alegerea gamei IN urmează convențiile tradiționale de numire a variabilelor din matematică .
Diverse limbaje de programare, inclusiv Prolog , Haskell , Ruby și Go, tratează identificatorii care încep cu o literă mare diferit de cei care încep cu o literă mică.
Microsoft .NET Common Language Infrastructure (CLI) are o modalitate de a scăpa de variabile în limba apelată care ar putea fi cuvinte cheie în limba de apelare, numită stropping [13] în sursele engleze . Uneori, acest lucru se face cu prefixe. De exemplu, în C# , numele variabilelor pot începe cu un prefix " " @. [14] VB.Net folosește paranteze drepte în același scop. [cincisprezece]
Asociată cu simboluri este notația maghiară , o convenție de denumire a variabilelor care determină tipul unei variabile prin adăugarea anumitor prefixe de litere la numele variabilei. Spre deosebire de sigiluri, notația maghiară nu oferă compilatorului nicio informație; tipurile trebuie specificate în mod explicit pentru variabile (cu excepția cazului în care se folosește un limbaj de deducere a tipurilor ). Deoarece majoritatea compilatoarelor standard nu impun utilizarea prefixelor, acest lucru permite să fie făcute erori și face ca codul să fie predispus la confuzie din cauza utilizării greșite accidentale. [16]
În timp ce simbolurile se aplică numelor (identificatorilor), prefixele și sufixele similare se pot aplica literalelor , în special numerelor întregi și șirurilor de caractere, specificând fie modul în care este interpretat literalul, fie tipul său de date. De exemplu, este 0x10ULLtratat ca valoarea 16 cu un tip de date C++ unsigned long long: indică faptul 0xcă este un număr hexazecimal, iar sufixul ULLindică tipul. Prefixele sunt adesea folosite pentru a marca șiruri fără escape de caractere . De exemplu r"C:\Windows", în Python, un șir cu evadare ar fi scris ca "C:\\Windows".
Deoarece afectează semantica (sensul) literalului, și nu sintaxa sau semantica identificatorului (numelui), nu este nici stropping (sintaxa identificatorului) nici sigil (semantica identificatorului), în ciuda asemănărilor sintactice.
De exemplu, adnotări Java încorporate, cum ar @Overridefi @Deprecated.
În unele cazuri, aceeași sintaxă poate fi folosită în scopuri diferite, ceea ce poate provoca confuzie. De exemplu, în C# , prefixul „ ” @poate fi folosit atât ca stropping, cât și ca prefix la un literal (pentru a denota șiruri fără escape); în acest caz, nici utilizarea nu este un sigil deoarece afectează sintaxa identificatorilor sau semantica literalilor, nu semantica identificatorilor.