Sigil (programare computer) - Sigil (computer programming)
În programare , un sigiliu ( / s ɪ dʒ əl / ) este un simbol aplicată pe o variabilă nume, arătând variabilei datatype sau domeniul de aplicare , de obicei , un prefix, la fel ca în $foo , în cazul în care $ este sigiliul.
Sigil , din latinescul sigillum , care înseamnă un „semn mic”, înseamnă un semn sau o imagine presupusă a avea putere magică . Sigilele pot fi folosite pentru a separa și delimita spații de nume care posedă proprietăți sau comportamente diferite.
Context istoric
Utilizarea sigilelor a fost popularizată de limbajul de programare BASIC . Cel mai cunoscut exemplu de sigil în BASIC este semnul dolar (" $ ") atașat la numele tuturor șirurilor . Multe dialecte BASIC folosesc alte sigilii (cum ar fi „ % ”) pentru a desemna numere întregi și numere în virgulă mobilă și precizia lor, și uneori și alte tipuri.
Larry Wall a adoptat utilizarea scripturilor de tip shell pentru limbajul său de programare Perl . În Perl, sigiliile nu specifică tipuri de date cu granulație fină, cum ar fi șiruri și numere întregi, ci categoriile mai generale de scalari (folosind un prefix " $ "), matrici (folosind " @ "), hashuri (folosind " % ") și subrutine (folosind „ & ”). Raku folosește, de asemenea, sigilii secundare sau crengi , pentru a indica sfera variabilelor. Exemple proeminente de crengi în Raku includ „ ^ ”, utilizat cu parametri formali auto-declarați („variabile substituent”) și „ . ”, utilizat cu accesorii de atribute de obiecte (de exemplu, variabile de instanță).
În CLIPS , variabilele scalare sunt prefixate cu un ? sigiliu " " în timp ce variabilele multicâmp (de exemplu, o listă cu 1 nivel) sunt prefixate cu " $? ".
În Common Lisp , variabilele speciale (cu scop dinamic) sunt în mod obișnuit înconjurate de * ceea ce este denumită „ convenția antifund ”. Deși aceasta este doar o convenție și nu este aplicată, limbajul însuși adoptă practica (de exemplu, * standard-output *). În mod similar, unii programatori înconjoară constante cu + .
În CycL , variabilele sunt prefixate cu un ? sigiliu. În mod similar, numele constante sunt prefixate cu „ #$ ” (pronunțat „hash-dollar”).
În Elixir , sigiliile șirurilor sunt furnizate prin ~ simbolul " ".
În MAPPER (aka BIS), variabilele denumite sunt prefixate cu „<” și sufixate cu „>” deoarece șirurile sau valorile de caractere nu necesită ghilimele.
În scriptul mIRC , identificatorii au un " $ " sigil, în timp ce toate variabilele au un % prefix " " (indiferent de variabile locale sau globale sau de tipul de date). Variabilele binare sunt prefixate cu un „ & ”.
În limbajul de programare MUMPS , " $ " precede numele funcțiilor intrinseci și „numele variabilelor speciale” (variabile încorporate pentru accesarea stării de execuție). " $Z " precede nume de funcții intrinseci non-standard. " $$ " precede numele funcțiilor extrinseci. Rutinele (utilizate pentru proceduri, subrutine, funcții) și variabilele globale (stocarea bazei de date) sunt prefixate de un cursor (^). Ultimul subarborel variabilă globală poate fi menționat indirect de un cursor și de ultimul indice; aceasta este denumită „referință goală”. Rutinele la nivel de sistem și variabilele globale (stocate în anumite baze de date partajate) sunt prefixate cu ^%; acestea sunt denumite „procente rutine” și „procente globale”.
În Objective-C , literele șirului precedate de " @ " sunt instanțe de tipul obiectului NSString sau, deoarece clang v3.1 / LLVM v4.0 NSNumber , NSArray sau NSDictionary . Prefix @ este , de asemenea , utilizat pe cuvintele cheie interface , implementation și end să -și exprime structura definițiilor de clasă. De asemenea, în declarațiile și definițiile clasei, - se utilizează un prefix de pentru a indica metodele și variabilele membre, în timp ce prefixul + indică elementele clasei.
În limbajul PHP , care a fost în mare parte inspirat de Perl, " $ " precede orice nume de variabilă . Numele care nu sunt prefixate de aceasta sunt considerate constante , funcții sau nume de clase (sau interfețe sau nume de trăsături, care au același spațiu de nume ca și clasele).
PILOT folosește „ $ ” pentru buffere (variabile șir), „ # „ pentru variabile întregi și „ * „ pentru etichetele programului.
Python folosește un " @ " prefix, numit sintaxă plăcintă , pentru aplicarea decoratorilor și un __ prefix, denumit " dunder" , pentru atribute "private" .
În Ruby , variabilele obișnuite nu au sigilii, dar „ $ ” este prefixat la variabilele globale , „ @ ” este prefixat la variabilele de instanță , iar „ @@ ” este prefixat la variabilele de clasă . Ruby folosește, de asemenea, sigilele de sufix (strict convenționale): " ? " indică o metodă de predicat care returnează (de obicei) o valoare booleană ; și „ ! ” indică faptul că metoda poate avea un efect potențial neașteptat și trebuie tratată cu grijă.
În schemă , prin convenție, numele procedurilor care returnează întotdeauna o valoare booleană se termină de obicei cu „ ? ”. De asemenea, numele procedurilor care stochează valori în părți ale obiectelor Schemei alocate anterior (cum ar fi perechi, vectori sau șiruri) se termină de obicei cu „ ! ”.
ML standard folosește prefixul sigil " ' " pe o variabilă care se referă la un tip. Dacă sigiliul este dublat, se referă la un tip pentru care este definită egalitatea. Caracterul " ' " poate apărea și în interiorul sau la sfârșitul unei variabile, caz în care nu are o semnificație specială.
În Transact-SQL , " @ " precede o variabilă locală sau un nume de parametru. Variabilele de sistem (cunoscute sub numele de variabile globale) se disting printr-un " @@ " prefix.
În Windows PowerShell , care a fost parțial inspirat de Unix Shells și Perl, numele variabilelor sunt prefixate cu $ sigiliul " ".
În XSLT , variabilele și parametrii au un $ sigil " " principal la utilizare, deși atunci când sunt definite în <xsl:param> sau <xsl:variable> cu name atributul " ", sigilul nu este inclus. În legătură cu XSLT, XQuery folosește forma " $ " sigil 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 de scriptare shell
În scripturile shell Unix și în utilitare precum Makefiles , „ $ ” este un operator unar care traduce numele unei variabile în conținutul său. Deși acest lucru poate părea similar cu un sigiliu, acesta este în mod corespunzător un operator unar pentru indirecția lexicală , similar cu * operatorul de dereferință pentru indicii în C , așa cum se observă din faptul că semnul dolar este omis atunci când se atribuie unei variabile.
Convenții de identificare
În Fortran , sigilele nu sunt utilizate, dar toate variabilele care încep cu literele I, J, K, L, M și N sunt întregi în mod implicit. Documentația Fortran se referă la aceasta ca „tastare implicită”, deși tastarea explicită este întotdeauna disponibilă pentru a permite declararea oricărei variabile cu orice tip. (Alegerea gamei I – N este conformă cu convențiile tradiționale de denumire matematică .)
Diverse limbaje de programare, inclusiv Prolog , Haskell , Ruby și Go tratează identificatorii care încep cu o majusculă diferit de identificatorii care încep cu o literă mică, o practică legată de utilizarea sigilelor.
Stropping
De fapt, o formă de stropire , utilizarea multor limbi în Microsoft .NET Common Language Infrastructure (CLI) necesită o modalitate de a utiliza variabile într-o altă limbă, care pot fi cuvinte cheie într-o limbă de apelare. Acest lucru se face uneori prin prefixe. În C # , orice nume de variabilă poate fi prefixat cu „ @ ”. Aceasta este utilizată în principal pentru a permite utilizarea unor nume de variabile care altfel ar intra în conflict cu cuvintele cheie. Același lucru se obține în VB.Net prin încadrarea numelui între paranteze drepte, ca în [end] .
@ Prefixul " " poate fi aplicat și literelor șirului; vezi afixele literale de mai jos.
Notație maghiară
Legat de sigilii este notația maghiară , o convenție de denumire pentru variabile care specifică tipul variabilei prin atașarea anumitor prefixe alfabetice la numele variabilei. Spre deosebire de sigilii, totuși, notația maghiară nu oferă nicio informație compilatorului; ca atare, tipurile explicite trebuie să fie specificate redundant pentru variabile (cu excepția cazului în care se utilizează un limbaj cu inferență de tip ). Deoarece majoritatea compilatoarelor standard nu impun utilizarea prefixelor, acest lucru permite omiterea și, de asemenea, face codul predispus la confuzie din cauza utilizării eronate accidentale.
Afixele literale
În timp ce sigilele sunt aplicate numelor (identificatori), prefixele și sufixele similare pot fi aplicate literelor , în special literelor întregi și literelor șirului , specificând fie cum trebuie evaluat literalul, fie ce tip de date este. De exemplu, 0x10ULL evaluează valoarea 16 ca un întreg lung lung nesemnat în C ++: 0x prefixul indică hexazecimal, în timp ce sufixul ULL indică nesemnificat lung lung. În mod similar, prefixele sunt adesea folosite pentru a indica un șir brut , cum ar fi r"C:\Windows" în Python, care reprezintă șirul cu valoare C:\Windows ; ca un șir de caractere a scăpat acest lucru ar fi scris ca "C:\\Windows" .
Deoarece aceasta afectează semantica (valoarea) unui literal, mai degrabă decât sintaxa sau semantica unui identificator (nume), aceasta nu este nici stropire (sintaxa identificatorului), nici un sigil (semantica identificatorului), dar este similar din punct de vedere sintactic.
Adnotări Java
Comparați adnotările Java, cum ar fi @Override și @Deprecated.
Confuzie
În unele cazuri, aceeași sintaxă poate fi utilizată în scopuri distincte, ceea ce poate provoca confuzie. De exemplu, în C # , @ prefixul " " poate fi folosit fie pentru stropire (pentru a permite cuvintelor rezervate să fie utilizate ca identificatori), fie ca prefix la un literal (pentru a indica un șir brut ); în acest caz, niciuna dintre utilizări nu este un sigiliu, deoarece afectează sintaxa identificatorilor sau semantica literelor, nu semantica identificatorilor.