Ungarsk notation
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 25. september 2017; checks kræver
19 redigeringer .
Ungarsk notation i programmering er en navnekonvention for variabler , konstanter og andre identifikatorer i programkode . Den ungarske notation fik sit navn takket være den ungarsk -fødte Microsoft -programmør Charles Simoni ( Hung. Simonyi Károly ), som foreslog det tilbage i tiden med udviklingen af de første versioner af MS-DOS . Dette system er blevet en intern Microsoft-standard [1] .
Essensen af den ungarske notation er, at navnene på identifikatorer indledes med foruddefinerede præfikser bestående af et eller flere tegn. Samtidig er hverken selve tilstedeværelsen af præfikser eller deres skrivning et krav til programmeringssprog , og hver programmør (eller team af programmører) kan have deres egne.
Det anvendte præfikssystem afhænger af mange faktorer:
- programmeringssprog (jo mere "liberal" syntaks, jo mere kontrol kræves der fra programmørens side, hvilket betyder, at systemet af præfikser er mere udviklet. Derudover er brugen af sin egen terminologi i hvert af programmeringssprogene introducerer også funktioner i valget af præfikser);
- programmeringsstil ( objektorienteret kode kræver muligvis slet ikke præfikser, mens de i "monolitisk" ofte er nødvendige for læselighed);
- emneområde (for eksempel kan præfikser bruges til at registrere måleenheder);
- tilgængelige automatiseringsværktøjer ( dokumentationsgenerator , kodenavigation , forudsigelig tekstinput , automatiseret refactoring osv.).
Eksempler
Indtast præfikser
Præfiks |
Forkortelse for |
Betyder |
Eksempel
|
s |
snor |
linje |
sClientName
|
sz |
nul-termineret streng |
null-termineret streng |
szClientName
|
n,i |
int |
heltalsvariabel |
nSize, iSize
|
l |
lang |
langt heltal |
lAmount
|
b |
boolesk |
boolesk |
bIsEmpty
|
-en |
array |
array |
aDimensions
|
t, dt |
tid, dato og klokkeslæt |
tid, dato og tid |
tDelivery,dtDelivery
|
s |
pointer |
pointer |
pBox
|
lp |
lang pegepind |
dobbelt (fjern) pointer |
lpBox
|
r |
reference |
link |
rBoxes
|
h |
håndtere |
beskrivelse |
hWindow
|
m_ |
medlem |
medlemsvariabel |
m_sAddress
|
g_ |
global |
global variabel |
g_nSpeed
|
C |
klasse |
Klasse |
CString
|
T |
type |
type |
TObject
|
jeg |
interface |
interface |
IDispatch
|
v |
ugyldig |
mangel på type |
vReserved
|
Som du kan se i ovenstående eksempel, kan præfikset også være sammensat. m_sAddressFor eksempel bruges en kombination af "m_" og "s" ( )
præfikser til at navngive en strengmedlemsvariabel i en klasse .
Semantiske præfikser
Ungarsk notation for applikationer :
Præfiks |
Forkortelse for |
Betyder |
Eksempel
|
jeg |
indeks |
Indeks |
int ix; Array[ix] = 10;
|
d |
delta |
Forskel mellem værdier |
int a, b; ... dba = b - a;
|
n |
nummer |
Antal |
size_t nFound = 0;
|
-en |
argument |
Argument |
SomeClass::SomeClass(int aX) : x(aX) {}
|
jeg
|
interface
|
Interface (i typenavn)
|
interface IFactory {}
|
For og imod
Blandt programmører er der både tilhængere og modstandere af brugen af ungarsk notation. Modstandere hævder, at det er besværligt og kun forværrer forståelsen af koden. Tilhængere hævder, at for mange mennesker misforstår hovedideen og misbruger notationen.
Fordele
- Hvis den indbyggede skrivemekanisme ikke er nok, giver ungarsk notation dig mulighed for at skrive undertypen [ af en variabel - for eksempel kan int cPricedet betyde, at variablen ikke kun har en heltalstype, men en valuta en ( valuta ). Det er denne brug af præfikser, der blev foreslået af Simonyi [2] . Dette kan være nyttigt:
- I lav-niveau programmering (når sættet af tilgængelige typer er så snævert, at f.eks. en heltalstype ikke adskiller sig fra boolean ).
- I dynamisk indtastede sprog , såsom PHP , hvor den samme variabel kan gemme værdier af enhver type.
- I tekniske beregninger (til registrering af måleenheder). Dette giver dig mulighed for at slippe af med et betydeligt antal fejl ved blot at beregne dimensionerne.
- Andre steder, hvor variabler af samme type er beregnet til at lagre heterogene data - for eksempel i computerhackerbeskyttelseskode, kan præfikset angive "rå" og " escaped " data ( SQL-injektion , XSS ).
- Ungarsk notation er praktisk til at skrive store programmer i ufuldstændige (ved moderne standarder) editorer uden automatisk tekstnavigation. Det er højst sandsynligt, hvorfor det er blevet standardkodestilen i WinAPI .
- Ungarsk notation kan opfattes som et standardsystem af forkortelser. For eksempel kan søgeindtastningsfeltet og knappen "Søg" navngives som txtSearchog btnSearch; antallet af personer kan skrives som manCounteller nMen. Denne praksis giver dig mulighed for at gøre variabelnavne korte og samtidig meningsfulde.
- Løser identifikationskonflikter: .Point::Point(int aX, int aY) : x(aX), y(aY) {}
Joke
Denne navngivningsstil kaldes den "ungarske" notation efter fødestedet for Microsofts programmeringschef Charles Simonyi, som opfandt den. (Ikke fordi brugen af det får programmer til at se ud som om de er skrevet på ungarsk [3] )
A. Golub. Reb af tilstrækkelig længde.
Ulemper
- Nogle programmører oplever, at brug af præfikser gør variabelnavne mindre tydelige og dermed forringer kodens læsbarhed. [fire]
- Hvis navnet på en variabel uden præfikser er ukendt, er det nogle gange svært at gendanne dens præfikser.
- Autodokumentationssystemet vil , hvis det ikke forstår præfikssystemet, sortere den alfabetiske liste efter præfiks, hvilket kan påvirke kvaliteten af dokumentationen negativt. Funktionsnavne er dog normalt ikke foranstillet.
- Optagelse af flere præfikser på grund af den hyppige brug af store bogstaver og understregninger kan blive en "dans på knappen ⇧ Shift".
- Navigationsværktøjerne, der er inkluderet i moderne kodeeditorer, giver dig allerede mulighed for at se typen af enhver variabel og hurtigt springe til det punkt, hvor den er defineret - det vil sige, at brugen af præfikser kan være overflødig.
- Når du ændrer typen, bliver du nødt til at ændre variabelnavnet (ikke alle kodeeditorer kan gøre dette automatisk). [fire]
- Der er andre måder at angive typen af en variabel i dens navn: for eksempel er ordene , har osv . for en boolsk type ( IsLoggedIn), tæller for en tæller ( RefCount), flertal for en matrix ( UserIds). På sprog, hvor store bogstaver ikke svarer til små bogstaver, kan bogstaver også kode noget.
En velkendt modstander af den ungarske notation er Linus Torvalds : "At indskrive typen af en variabel i dens navn (den såkaldte ungarske notation) er mangelfuld - compileren kender allerede typerne og kan kontrollere dem, og det forvirrer programmøren " [5] .
Interessante fakta
- Bogstavkombinationen sz , brugt i ungarsk notation, er faktisk meget brugt på ungarsk og betyder lyden /s/ [6] . Så komponisten Franz Liszt på ungarsk Liszt .
Se også
Noter
- ↑ Ungarsk notation . Hentet 14. juni 2022. Arkiveret fra originalen 10. juni 2006. (ubestemt)
- ↑ Joel Spolsky .
Sådan får du en forkert kode til at se forkert ud Arkiveret 19. juli 2006 på Wayback-maskinen
- ↑ Det ungarske sprog , selvom det har et latinsk alfabet, anses for ekstremt ulæseligt for uoplyste.
- ↑ 1 2 Inside C++ - Ungarsk notation . Hentet 12. november 2008. Arkiveret fra originalen 30. oktober 2008. (ubestemt)
- ↑ "Linux-kernekodningsstil" Arkiveret 23. september 2005. . Linux-kernedokumentation (på engelsk).
- ↑ Om digraphen sz på den engelske Wikipedia