Notație maghiară

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În calculul notației ungara, sau notația maghiară este o convenție de denumire (în engleză naming convention) utilizată în programare , unde numele obiectului indică tipul și scopul utilizării sale.

Această notație se numește „maghiară” atât din cauza naționalității maghiare a inventatorului său Charles Simonyi, cât și pentru că prefixele nepronunțabile amintesc ortografia bogată în consoane a unor limbi est-europene (deși limba maghiară este de fapt bogată în vocale, acolo există perechea a literelor „sz” apare frecvent, ceea ce în notația maghiară reprezintă șiruri care se termină cu zero).

Notarea maghiară a fost concepută pentru a fi independentă de limbă , iar prima sa aplicație majoră a fost folosită în limba BCPL . Datorită faptului că BCPL nu are alte tipuri de date decât cuvântul mașină, nu există nimic în limbajul în sine care să îl ajute pe programator să-și amintească tipul de variabile . Notația maghiară încearcă să rezolve această problemă oferind programatorului o indicație explicită a tipului de date al fiecărei variabile.

Convenția de numire

În notația maghiară, un nume de variabilă începe cu un prefix format din una sau mai multe litere mici pentru a forma o mnemonică pentru tipul sau scopul acestei variabile. Prefixul este urmat de numele ales de programator; ultima parte este adesea denumită „numele atribuit”. Primul caracter al numelui atribuit este scris cu majuscule pentru a-l separa vizual de prefix ca în notația cămilă .

Există două tipuri de notații maghiare: sistem și aplicație. Diferența dintre cele două tipuri de notație maghiară este scopul prefixului.

Origini

Inițial, notația inventată de Charles Simonyi , un programator la Xerox care ulterior a devenit arhitect șef la Microsoft, s-a numit Apps Hungarian . Acest nume a fost inventat deoarece această convenție a fost utilizată de diviziunea Microsoft care a produs software-ul aplicației , unde notația indica tipul de date stocate în variabilă.

Notarea sistemului a fost dezvoltată ulterior de echipa de dezvoltare Windows pe baza documentelor Simonyi. Documentul făcea referire la prefixul utilizat pentru a indica „tipul” de informații stocate: cuvântul „tip” a fost înțeles greșit ca „tip de date”, iar prefixele de sistem au fost concepute cu acest sens.

Notare sistem și aplicație

În notația de sistem, cea mai frecventă formă actuală, prefixul codifică tipul real al variabilei. De exemplu:

  • ulAccountNum: variabila este u nsigned l ong întreg
  • szName: Variabila este Tring z terminată ero-s

Notarea aplicației, o formă originală inventată de Simonyi, nu codifică tipul real al tipului, ci oferă o indicație a scopului variabilei sau a obiectului sau a ceea ce reprezintă. De exemplu:

  • rwPosition: variabilă care reprezintă un rând ( rând )
  • idName: variabilă care reprezintă identificatorul unic al unui nume

Deși notația folosește coduri mnemonice, nu există nicio prescripție cu privire la codurile de utilizat. Prin urmare, există mai multe convenții, dar poate fi utilizat orice set de litere. Ceea ce este mai important este că utilizarea codurilor este consecventă într-o anumită bucată de cod.

Exemple

  • nMărime: întreg
  • cMere: număr de elemente
  • dwLightYears: Cuvânt dublu
  • bBusy: Boolean
  • fBusy: steag boolean
  • pFoo: indicator
  • szLastName: Șir terminat cu zero
  • rgStudents: Array sau range

Codul pentru pointeri și tablouri, care nu sunt tipuri de date efective, este de obicei urmat de tipul de date al elementelor:

  • rgfBalances: matrice de valori în virgulă mobilă
  • pszOwner: pointer către un șir terminat zero

Deși notația maghiară poate fi aplicată oricărei limbi și mediu, a fost adoptată pe scară largă de Microsoft pentru limba C , în special pentru Windows . Prin urmare, construcțiile de notare maghiare specifice Windows sunt foarte frecvente:

  • hwndFoo: mâner la o fereastră
  • lpszBar: indicator lung către un șir terminat zero

Notarea este adesea extinsă în C ++ pentru a indica sfera unei variabile, separată printr-o subliniere:

  • m_dwWheels: membru al unei clase, cuvânt dublu

Notația maghiară devine confuză atunci când este utilizată pentru a reprezenta proprietăți diferite, ca în acest exemplu:

  • a_crszkvc30LastNameCol: referință constantă la un parametru funcțional care conține o coloană de bază de date de tip varchar (30) numită LastName care făcea parte din cheia primară

Pareri

În lumea computerelor există opinii contradictorii cu privire la utilitatea notației maghiare. Cele mai frecvente critici se referă la inutilitatea notării sistemului, având în vedere că compilatoarele moderne sunt capabile să verifice singuri tipurile de variabile (spre deosebire de BCPL pentru care a fost concepută inițial notația), lizibilitatea redusă a codului care rezultă din utilizarea sa , și problemele care apar în aval în cod atunci când se schimbă tipul unei variabile (ceea ce ar implica schimbarea numelui oriunde a fost utilizată).

( EN )

„Codificarea tipului unei funcții în nume (așa-numita notație maghiară) este afectată de creier - compilatorul știe oricum tipurile și le poate verifica și confundă doar programatorul. Nu este de mirare că Microsoft creează programe buggy. "

( IT )

«Introducerea tipului funcției în numele acesteia (așa-numita notație maghiară) este o prostie: compilatorul știe încă tipul și îl poate verifica, iar singurul lucru pe care îl face este să deruteze programatorul. Nu este de mirare că Microsoft [care folosește această notație] creează programe proaste. "

( Linus Torvalds în ghidul stilului codului kernel linux )
( EN )

„Într-un limbaj OO adevărat și pur (care nu este C ++) notația maghiară nu ar avea niciun scop. Aici, variabilele sunt fără tip - conțin un obiect, al cărui tip depinde de obiectul în sine, nu de variabilă. Nu există tipuri primitive. "

( IT )

«Într-un adevărat limbaj orientat obiect (care nu este C ++ ), notația maghiară nu ar avea sens. Aici variabilele nu sunt tastate; conțin un obiect al cărui tip depinde de obiectul în sine, nu de variabilă. Nu există tipuri primitive. "

( Roger Onslow )
( EN )

„[... notația maghiară va] împiedica portarea codului dvs. de pe platformele de 16 biți pe 32 biți.”

( IT )

„[... notația maghiară] exclude posibilitatea portării codului de pe o platformă pe 16 biți pe una pe 32 de biți .”

( Bill Davis )
( EN )

«Notarea maghiară codifică informațiile de tip în nume de variabile. Acest lucru este foarte util în limbile care nu țin evidența informațiilor despre tipuri pentru dvs. Dar în C ++ sau Eiffel este complet redundant. Astfel, notația se adaugă pur și simplu la obscuritate. Notarea maghiară este, atunci când totul este spus și făcut, o tehnică de comentare. Iar marea lege a comentariilor este că mint. Comentariile nu sunt verificate de sintaxă, nimic nu le obligă să fie corecte. "

( IT )

Notarea maghiară codifică tipul în numele variabilei. Acest lucru este foarte util în limbile care nu urmăresc informațiile de tip. Dar în C ++ sau Eiffel este complet redundant. De asemenea, notația mărește pur și simplu complexitatea [citirii codului]. Notarea maghiară este, la urma urmei, o tehnică pentru comentarea codului. Și una dintre regulile principale ale comentariilor este că acestea mint. Sintaxa comentariilor nu este verificată de compilator , nimic nu le obligă să fie corecte. "

( Robert C. Martin )

linkuri externe