Sigil (programare)

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

Context istoric

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.

Fenomene similare

Variabile Shell

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

Convenții de identificare

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

Straping

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]

Notația maghiară

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]

Afixe de litere

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

Adnotări Java

De exemplu, adnotări Java încorporate, cum ar @Overridefi @Deprecated.

Confuzie

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

Vezi și

Note

  1. Vladimir Lettiev. Pragmatic Perl 13: Semnătura funcției în Perl 5.20 . Pragmatic Perl (13 martie 2014). — „... puteți folosi un sigil obișnuit [...] În acest exemplu, funcția este interesată doar de primul și al patrulea argument. Substituenții de poziție sunt specificați pentru restul argumentelor: simbolurile $ și @, acestea nu vor fi definite în interiorul funcției.”. Preluat la 13 septembrie 2021. Arhivat din original la 13 septembrie 2021.
  2. Andrey Shitov. Pragmatic Perl 22: Perl 6 pentru secolul 21 . Pragmatic Perl (22 decembrie 2014). „Perl 6 folosește simboluri pentru variabilele care se suprapun cu Perl 5. În special, scalarii, listele și hashurile folosesc simbolurile $, @ și, respectiv, %.” Preluat la 13 septembrie 2021. Arhivat din original la 13 septembrie 2021.
  3. Definiția sigil . Dicţionar englez Collins . Preluat la 22 mai 2012. Arhivat din original la 1 mai 2021.
  4. „Perl 6 variables:Twigils” Arhivat 17 iunie 2016 la Wayback Machine , documentație Perl 6
  5. Variabile - Cycorp . www.cyc.com . Consultat la 31 decembrie 2017. Arhivat din original la 25 ianuarie 2018.
  6. Constants-Cycorp . www.cyc.com . Consultat la 31 decembrie 2017. Arhivat din original la 25 ianuarie 2018.
  7. Sigiluri . Elixir și Wunsh (2020). Preluat la 13 septembrie 2021. Arhivat din original la 13 septembrie 2021.
  8. Sigiluri  . _ elixir-lang.github.com . Preluat la 27 iulie 2021. Arhivat din original la 2 august 2021.
  9. mIRC Ajutor . www.mirc.com . Preluat la 27 iulie 2021. Arhivat din original la 9 august 2021.
  10. PEP 318 -- Decoratori pentru Funcţii şi Metode . Preluat la 9 august 2021. Arhivat din original la 3 iunie 2020.
  11. Negru. Metode de bang; sau, Pericol, Will Rubyist! (15 august 2007). Arhivat din original pe 22 mai 2016.
  12. Reguli pentru introducerea datelor (Fortran 77 Language Reference) . docs.oracle.com . Preluat la 4 august 2021. Arhivat din original la 25 februarie 2021.
  13. King, Peter R., ed. (18.06.1974). „(necunoscut)” . Actele unei conferințe internaționale privind implementarea ALGOL 68 . Department of Computer Science, University of Manitoba, Winnipeg: University of Manitoba, Department of Computer Science: 148. ISBN  9780919628113 . Arhivat din original pe 09.08.2021 . Extras 2021-08-09 . Probleme mai grave sunt puse de „stropping”, tehnica folosită pentru a distinge textul cu caractere aldine de textul roman. Unele implementări necesită apostrofe în jurul caracterelor aldine (de unde numele stropping); altele necesită spațiere înapoi și subliniere; […] Parametrul depreciat folosit |deadlink=( ajutor )
  14. C# Cuvinte cheie . MSDN . Preluat la 23 martie 2011. Arhivat din original la 28 ianuarie 2017.
  15. șir (Referință C#) . MSDN . Consultat la 23 martie 2011. Arhivat din original pe 14 martie 2011.
  16. Stilul de codare a nucleului Linux Arhivat 9 august 2021 la Wayback Machine , de Linus Torvalds