Notatie maghiara
Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită la 25 septembrie 2017; verificările necesită
19 modificări .
Notația maghiară în programare este o convenție de denumire pentru variabile , constante și alți identificatori din codul programului . Notația maghiară și-a primit numele datorită programatorului Microsoft de origine maghiară Charles Simoni ( Hung. Simonyi Károly ), care a propus-o încă din zilele dezvoltării primelor versiuni de MS-DOS . Acest sistem a devenit un standard intern Microsoft [1] .
Esența notației maghiare constă în faptul că numele identificatorilor sunt precedate de prefixe prespecificate constând din unul sau mai multe caractere. În același timp, de regulă, nici prezența prefixelor, nici scrierea acestora nu este o cerință a limbajelor de programare , iar fiecare programator (sau echipă de programatori) poate avea propria lor.
Sistemul de prefixe utilizat depinde de mulți factori:
- limbaj de programare (cu cât sintaxa este mai „liberală”, cu atât este necesar mai mult control din partea programatorului, ceea ce înseamnă că sistemul de prefixe este mai dezvoltat. În plus, utilizarea terminologiei proprii în fiecare dintre limbajele de programare introduce de asemenea caracteristici în alegerea prefixelor);
- stilul de programare ( codul orientat pe obiecte poate să nu necesite prefixe deloc, în timp ce în „monolitic” acestea sunt adesea necesare pentru lizibilitate);
- domeniu (de exemplu, prefixele pot fi folosite pentru a înregistra unitățile de măsură);
- instrumente de automatizare disponibile ( generator de documentație , navigare prin cod , introducere predictivă a textului , refactorizare automată etc.).
Exemple
Introduceți prefixele
Prefix |
Scurt pentru |
Sens |
Exemplu
|
s |
şir |
linia |
sClientName
|
sz |
șir terminat cu zero |
șir terminat nul |
szClientName
|
n,i |
int |
variabilă întreagă |
nSize, iSize
|
l |
lung |
întreg lung |
lAmount
|
b |
boolean |
boolean |
bIsEmpty
|
A |
matrice |
matrice |
aDimensions
|
t, dt |
ora, data ora |
ora, data si ora |
tDelivery,dtDelivery
|
p |
indicator |
indicator |
pBox
|
lp |
indicator lung |
indicator dublu (departe). |
lpBox
|
r |
referinţă |
legătură |
rBoxes
|
h |
mâner |
descriptor |
hWindow
|
m_ |
membru |
variabila membru |
m_sAddress
|
g_ |
global |
variabilă globală |
g_nSpeed
|
C |
clasă |
Clasă |
CString
|
T |
tip |
tip de |
TObject
|
eu |
interfata |
interfata |
IDispatch
|
v |
gol |
lipsa tipului |
vReserved
|
După cum puteți vedea în exemplul de mai sus, prefixul poate fi și compus. m_sAddressDe exemplu, o combinație de prefixe „m_” și „s” ( )
este utilizată pentru a denumi o variabilă membru șir a unei clase .
Prefixe semantice
Notație maghiară pentru aplicații :
Prefix |
Scurt pentru |
Sens |
Exemplu
|
i |
index |
Index |
int ix; Array[ix] = 10;
|
d |
delta |
Diferența dintre valori |
int a, b; ... dba = b - a;
|
n |
număr |
Cantitate |
size_t nFound = 0;
|
A |
argument |
Argument |
SomeClass::SomeClass(int aX) : x(aX) {}
|
eu
|
interfata
|
Interfață (în numele tipului)
|
interface IFactory {}
|
Pro și contra
Printre programatori, există atât susținători, cât și oponenți ai folosirii notației maghiare. Oponenții susțin că este greoaie și nu face decât să înrăutățească înțelegerea codului. Susținătorii susțin că prea mulți oameni înțeleg greșit ideea principală și folosesc greșit notația.
Beneficii
- Dacă mecanismul de tastare încorporat nu este suficient, notația maghiară vă permite să scrieți subtipul al unei variabile - de exemplu, int cPricepoate însemna că variabila nu are doar un tip întreg, ci unul valutar ( currency ). Această utilizare a prefixelor a fost propusă de Simonyi [2] . Acest lucru ar putea fi util:
- În programarea de nivel scăzut (când setul de tipuri disponibile este atât de restrâns încât, de exemplu, un tip întreg nu diferă de boolean ).
- În limbi cu tastare dinamică , cum ar fi PHP , unde aceeași variabilă poate stoca valori de orice tip.
- În calculele de inginerie (pentru înregistrarea unităților de măsură). Acest lucru vă permite să scăpați de un număr considerabil de erori prin simpla calculare a dimensiunilor.
- În alte locuri în care variabilele de același tip sunt destinate să stocheze date eterogene - de exemplu, în codul de protecție împotriva hackerilor de computer, prefixul poate indica date „brute” și „ scapate ” ( SQL injection , XSS ).
- Notația maghiară este convenabilă pentru scrierea de programe mari în editori incomplete (după standardele moderne), fără navigare automată a textului. Acesta este cel mai probabil motivul pentru care a devenit stilul de cod standard în WinAPI .
- Notația maghiară poate fi considerată un sistem standard de abrevieri. De exemplu, câmpul de introducere a căutării și butonul „Căutare” pot fi denumite ca txtSearchși btnSearch; numărul de persoane poate fi scris ca manCountsau nMen. Această practică vă permite să faceți nume de variabile scurte și, în același timp, semnificative.
- Rezolvă conflictele de identificare: .Point::Point(int aX, int aY) : x(aX), y(aY) {}
Glumă
Acest stil de denumire este numit notația „maghiară”, după locul nașterii directorului de programare al Microsoft, Charles Simonyi, care l-a inventat. (Nu pentru că folosirea lui face ca programele să pară scrise în limba maghiară [3] )
A. Golub. Funie de lungime suficientă.
Dezavantaje
- Unii programatori constată că folosirea prefixelor face ca numele variabilelor să fie mai puțin clare și, astfel, înrăutățește lizibilitatea codului. [patru]
- Dacă numele unei variabile fără prefixe este necunoscut, uneori este dificil să-i recuperezi prefixele.
- Sistemul de autodocumentare , dacă nu înțelege sistemul de prefixe, va sorta lista alfabetică după prefix, ceea ce poate afecta negativ calitatea documentației. Cu toate acestea, numele funcțiilor nu sunt de obicei prefixate.
- Înregistrarea mai multor prefixe datorită utilizării frecvente a majusculelor și a sublinierii poate deveni un „dans pe buton ⇧ Shift”.
- Instrumentele de navigare care sunt incluse în editorii de cod modern vă permit deja să vedeți tipul oricărei variabile și să sari rapid la punctul în care este definită - adică utilizarea prefixelor poate fi redundantă.
- Când schimbați tipul, va trebui să schimbați numele variabilei (nu toți editorii de cod pot face acest lucru automat). [patru]
- Există și alte mijloace de a specifica tipul unei variabile în numele acesteia: de exemplu, cuvintele este , are etc. pentru un tip boolean ( IsLoggedIn), număr pentru un numărător ( RefCount), plural pentru o matrice ( UserIds). În limbile în care literele mari nu sunt echivalente cu literele mici, literele mici pot , de asemenea, codifica ceva.
Un oponent binecunoscut al notației maghiare este Linus Torvalds : „Inscrierea tipului unei variabile în numele ei (așa-numita notație maghiară) este greșită - compilatorul cunoaște deja tipurile și le poate verifica, iar acest lucru derutează programatorul ” [5] .
Fapte interesante
- Combinația de litere sz , folosită în notația maghiară, este într-adevăr folosită pe scară largă în limba maghiară și înseamnă sunetul /s/ [6] . Deci, compozitorul Franz Liszt în maghiară Liszt .
Vezi și
Note
- ↑ Notația maghiară . Consultat la 14 iunie 2022. Arhivat din original pe 10 iunie 2006. (nedefinit)
- ↑ Joel Spolsky .
Cum să faci codul greșit să arate greșit Arhivat 19 iulie 2006 la Wayback Machine
- ↑ Limba maghiară , deși are alfabet latin , este considerată extrem de ilizibilă pentru cei neinformați.
- ↑ 1 2 În interiorul C++ - Notație maghiară . Consultat la 12 noiembrie 2008. Arhivat din original la 30 octombrie 2008. (nedefinit)
- ↑ „Linux kernel coding style” Arhivat 23 septembrie 2005. . Documentația kernel-ului Linux (în engleză).
- ↑ Despre digraful sz de pe Wikipedia în engleză