Maďarská notace
Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od
verze recenzované 25. září 2017; kontroly vyžadují
19 úprav .
Maďarská notace v programování je konvence pojmenování proměnných , konstant a dalších identifikátorů v kódu programu . Maďarský zápis získal svůj název díky programátorovi Microsoftu narozenému v Maďarsku Charlesi Simonimu ( maď . Simonyi Károly ), který jej navrhl již v dobách vývoje prvních verzí MS-DOSu . Tento systém se stal interním standardem společnosti Microsoft [1] .
Podstatou maďarské notace je, že před názvy identifikátorů jsou předem specifikované předpony skládající se z jednoho nebo více znaků. Přitom samotná přítomnost prefixů ani jejich zápis zpravidla není požadavkem programovacích jazyků a každý programátor (či tým programátorů) může mít své vlastní.
Použitý systém předpon závisí na mnoha faktorech:
- programovací jazyk (čím „liberálnější“ syntaxe, tím větší kontrola je vyžadována ze strany programátora, což znamená, že systém prefixů je rozvinutější. Navíc použití vlastní terminologie v každém z programovacích jazyků také zavádí funkce ve výběru prefixů);
- styl programování ( objektově orientovaný kód nemusí prefixy vůbec vyžadovat, zatímco v „monolitickém“ jsou často potřebné pro čitelnost);
- předmětová oblast (např. předpony lze použít k záznamu měrných jednotek);
- dostupné automatizační nástroje ( generátor dokumentace , navigace v kódu , prediktivní zadávání textu , automatizovaný refaktoring atd.).
Příklady
Předpony typů
Předpona |
Zkratka pro |
Význam |
Příklad
|
s |
tětiva |
čára |
sClientName
|
sz |
nulou ukončený řetězec |
řetězec ukončený nulou |
szClientName
|
n, i |
int |
celočíselná proměnná |
nSize, iSize
|
l |
dlouho |
dlouhé celé číslo |
lAmount
|
b |
booleovský |
booleovský |
bIsEmpty
|
A |
pole |
pole |
aDimensions
|
t, dt |
čas, datum a čas |
čas, datum a čas |
tDelivery,dtDelivery
|
p |
ukazatel |
ukazatel |
pBox
|
lp |
dlouhý ukazatel |
dvojitý (vzdálený) ukazatel |
lpBox
|
r |
odkaz |
odkaz |
rBoxes
|
h |
Rukojeť |
deskriptor |
hWindow
|
m_ |
člen |
členská proměnná |
m_sAddress
|
G_ |
globální |
globální proměnná |
g_nSpeed
|
C |
třída |
Třída |
CString
|
T |
typ |
Typ |
TObject
|
já |
rozhraní |
rozhraní |
IDispatch
|
proti |
prázdnota |
nedostatek typu |
vReserved
|
Jak můžete vidět na výše uvedeném příkladu, předpona může být také složená. m_sAddressNapříklad kombinace předpon "m_" a "s" ( )
se používá k pojmenování řetězcové členské proměnné třídy .
Sémantické předpony
Maďarská notace pro aplikace :
Předpona |
Zkratka pro |
Význam |
Příklad
|
i |
index |
Index |
int ix; Array[ix] = 10;
|
d |
delta |
Rozdíl mezi hodnotami |
int a, b; ... dba = b - a;
|
n |
číslo |
Množství |
size_t nFound = 0;
|
A |
argument |
Argument |
SomeClass::SomeClass(int aX) : x(aX) {}
|
já
|
rozhraní
|
Rozhraní (v názvu typu)
|
interface IFactory {}
|
Pro a proti
Mezi programátory se najdou zastánci i odpůrci používání maďarské notace. Odpůrci namítají, že je to těžkopádné a jen zhoršuje pochopení kódu. Zastánci tvrdí, že příliš mnoho lidí nechápe hlavní myšlenku a zneužívá notaci.
Výhody
- Pokud vestavěný typovací mechanismus nestačí, maďarská notace umožňuje zapsat podtyp proměnné int cPrice - může to například znamenat, že proměnná nemá pouze celočíselný typ, ale měnový ( currency ). Právě toto použití předpon navrhl Simonyi [2] . Může se hodit toto:
- V nízkoúrovňovém programování (když je množina dostupných typů tak úzká, že se například celočíselný typ neliší od boolean ).
- V dynamicky typovaných jazycích , jako je PHP , kde stejná proměnná může ukládat hodnoty jakéhokoli typu.
- V technických výpočtech (pro záznam měrných jednotek). To vám umožní zbavit se značného množství chyb jednoduchým výpočtem rozměrů.
- Na jiných místech, kde jsou proměnné stejného typu určeny k ukládání heterogenních dat – například v kódu ochrany počítačových hackerů může předpona označovat „raw“ a „ escaped “ data ( SQL injection , XSS ).
- Maďarská notace je vhodná pro psaní velkých programů v neúplných (podle moderních standardů) editorech bez automatické navigace v textu. To je pravděpodobně důvod, proč se stal standardním stylem kódu ve WinAPI .
- Maďarskou notaci lze považovat za standardní systém zkratek. Například vstupní pole hledání a tlačítko "Hledat" lze pojmenovat jako txtSearcha btnSearch; počet osob lze zapsat jako manCountnebo nMen. Tato praxe vám umožňuje udělat názvy proměnných krátké a zároveň smysluplné.
- Řeší konflikty identifikátorů: .Point::Point(int aX, int aY) : x(aX), y(aY) {}
Žert
Tento styl pojmenování se nazývá „maďarská“ notace podle rodiště programového manažera Microsoftu Charlese Simonyiho, který jej vynalezl. (Ne proto, že jeho použití způsobí, že programy vypadají, jako by byly napsány v maďarštině [3] )
A. Golub. Lano dostatečné délky.
Nevýhody
- Někteří programátoři zjišťují, že používání prefixů činí názvy proměnných méně přehlednými a tím zhoršuje čitelnost kódu. [čtyři]
- Pokud je název proměnné bez předpon neznámý, je někdy obtížné její předpony obnovit.
- Autodokumentační systém , pokud nerozumí systému prefixů, seřadí abecední seznam podle prefixu, což může nepříznivě ovlivnit kvalitu dokumentace. Názvy funkcí však obvykle nemají předponu.
- Nahrávání několika předpon kvůli častému používání velkých písmen a podtržítek se může stát „tancem na tlačítku ⇧ Shift“.
- Navigační nástroje, které jsou součástí moderních editorů kódu, vám již umožňují vidět typ libovolné proměnné a rychle přejít do bodu, kde je definována – to znamená, že použití předpon může být nadbytečné.
- Když změníte typ, budete muset změnit název proměnné (ne všechny editory kódu to umí automaticky). [čtyři]
- Existují další způsoby, jak specifikovat typ proměnné v jejím názvu: například slova is , has atd. pro booleovský typ ( IsLoggedIn), count pro čítač ( RefCount), množné číslo pro pole ( UserIds). V jazycích, kde velká písmena nejsou ekvivalentní malým písmenům, mohou velká písmena také něco kódovat.
Známým odpůrcem maďarské notace je Linus Torvalds : „Zápis typu proměnné do jejího názvu (tzv. maďarská notace) je chybný - překladač již typy zná a může je zkontrolovat, což programátora mate “ [5] .
Zajímavosti
- Kombinace písmen sz , používaná v maďarské notaci, se v maďarštině skutečně hojně používá a znamená zvuk /s/ [6] . Tedy skladatel Franz Liszt v maďarštině Liszt .
Viz také
Poznámky
- ↑ Maďarská notace . Získáno 14. června 2022. Archivováno z originálu 10. června 2006. (neurčitý)
- ↑ Joel Spolsky .
Jak udělat špatný kód, aby vypadal špatně Archivováno 19. července 2006 na Wayback Machine
- ↑ Maďarský jazyk , přestože má latinskou abecedu, je považován za extrémně nečitelný pro neinformované.
- ↑ 1 2 Uvnitř C++ – maďarská notace . Získáno 12. listopadu 2008. Archivováno z originálu dne 30. října 2008. (neurčitý)
- ↑ „Styl kódování jádra Linuxu“ Archivováno 23. září 2005. . Dokumentace k linuxovému jádru (v angličtině).
- ↑ O digrafu sz na anglické Wikipedii