Unkarilainen merkintä
Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 25. syyskuuta 2017 tarkistetusta
versiosta . tarkastukset vaativat
19 muokkausta .
Unkarinkielinen merkintäohjelmointi on nimeämiskäytäntö muuttujille , vakioille ja muille ohjelmakoodin tunnisteille . Unkarilainen notaatio sai nimensä unkarilaissyntyisen Microsoft -ohjelmoijan Charles Simonin ( Hung. Simonyi Károly ) ansiosta, joka ehdotti sitä jo MS-DOS :n ensimmäisten versioiden kehittämisen päivinä . Tästä järjestelmästä on tullut Microsoftin sisäinen standardi [1] .
Unkarinkielisen merkinnän ydin on, että tunnisteiden nimiä edeltää ennalta määrätyt etuliitteet, jotka koostuvat yhdestä tai useammasta merkistä. Samaan aikaan pääsääntöisesti etuliitteiden läsnäolo tai niiden kirjoittaminen ei ole ohjelmointikielien vaatimus , ja jokaisella ohjelmoijalla (tai ohjelmoijaryhmällä) voi olla omansa.
Käytetty etuliitejärjestelmä riippuu monista tekijöistä:
- ohjelmointikieli (mitä "liberaalimpi" syntaksi, sitä enemmän ohjelmoijalta vaaditaan ohjausta, mikä tarkoittaa, että etuliitteiden järjestelmä on kehittyneempi. Lisäksi oman terminologian käyttö jokaisessa ohjelmointikielessä esittelee myös ominaisuuksia etuliitteiden valinnassa);
- ohjelmointityyli ( oliosuuntautunut koodi ei välttämättä vaadi etuliitteitä ollenkaan, kun taas "monoliittisessa" niitä tarvitaan usein luettavuuden vuoksi);
- aihealue (esimerkiksi etuliitteitä voidaan käyttää mittayksiköiden tallentamiseen);
- saatavilla olevat automaatiotyökalut ( dokumentaation generaattori , koodinavigointi , ennakoiva tekstinsyöttö , automaattinen uudelleenmuodostus jne.).
Esimerkkejä
Kirjoita etuliitteet
Etuliite |
Lyhenne jstk |
Merkitys |
Esimerkki
|
s |
merkkijono |
linja |
sClientName
|
sz |
nollapäätteinen merkkijono |
nollapäätteinen merkkijono |
szClientName
|
n, i |
int |
kokonaislukumuuttuja |
nSize, iSize
|
l |
pitkä |
pitkä kokonaisluku |
lAmount
|
b |
boolean |
boolean |
bIsEmpty
|
a |
joukko |
joukko |
aDimensions
|
t, dt |
aika, päivämäärä ja kellonaika |
aika, päivämäärä ja aika |
tDelivery,dtDelivery
|
s |
osoitin |
osoitin |
pBox
|
lp |
pitkä osoitin |
kaksoisosoitin (kaukoosoitin). |
lpBox
|
r |
viite |
linkki |
rBoxes
|
h |
kahva |
kuvaaja |
hWindow
|
m_ |
jäsen |
jäsenmuuttuja |
m_sAddress
|
g_ |
maailmanlaajuisesti |
globaali muuttuja |
g_nSpeed
|
C |
luokkaa |
Luokka |
CString
|
T |
tyyppi |
tyyppi |
TObject
|
minä |
käyttöliittymä |
käyttöliittymä |
IDispatch
|
v |
mitätön |
tyypin puute |
vReserved
|
Kuten yllä olevassa esimerkissä näet, etuliite voi olla myös yhdistelmä. m_sAddressEsimerkiksi etuliitteiden "m_" ja "s" ( )
yhdistelmää käytetään nimeämään luokan merkkijonojäsenmuuttuja .
Semanttiset etuliitteet
Unkarilainen merkintä sovelluksille :
Etuliite |
Lyhenne jstk |
Merkitys |
Esimerkki
|
i |
indeksi |
Indeksi |
int ix; Array[ix] = 10;
|
d |
delta |
Ero arvojen välillä |
int a, b; ... dba = b - a;
|
n |
määrä |
Määrä |
size_t nFound = 0;
|
a |
Perustelu |
Perustelu |
SomeClass::SomeClass(int aX) : x(aX) {}
|
minä
|
käyttöliittymä
|
Käyttöliittymä (tyypin nimessä)
|
interface IFactory {}
|
Puolesta ja vastaan
Ohjelmoijien joukossa on sekä unkarilaisen merkinnän käytön kannattajia että vastustajia. Vastustajat väittävät, että se on hankalaa ja vain huonontaa koodin ymmärtämistä. Kannattajat väittävät, että liian monet ihmiset ymmärtävät väärin pääidean ja käyttävät merkintää väärin.
Edut
- Jos sisäänrakennettu kirjoitusmekanismi ei riitä , unkarinkielinen merkintä mahdollistaa muuttujan alatyypin kirjoittamisen - se voi esimerkiksi int cPricetarkoittaa, että muuttujalla ei ole vain kokonaislukutyyppiä, vaan valuuttatyyppiä ( currency ). Juuri tätä etuliitteiden käyttöä ehdotti Simonyi [2] . Tästä saattaa olla hyötyä:
- Matalan tason ohjelmoinnissa (kun käytettävissä olevien tyyppien joukko on niin kapea, että esimerkiksi kokonaislukutyyppi ei eroa boolen tyypistä ).
- Dynaamisesti kirjoitetuissa kielissä , kuten PHP , joissa sama muuttuja voi tallentaa minkä tahansa tyyppisiä arvoja.
- Teknisissä laskelmissa (mittayksiköiden tallentamiseen). Näin voit päästä eroon huomattavasta määrästä virheitä yksinkertaisesti laskemalla mitat.
- Muissa paikoissa, joissa samantyyppiset muuttujat on tarkoitettu heterogeenisten tietojen tallentamiseen - esimerkiksi tietokoneen hakkereiden suojakoodissa, etuliite voi tarkoittaa "raakaa" ja " pakotettua " dataa ( SQL-injektio , XSS ).
- Unkarin merkintätapa on kätevä suurten ohjelmien kirjoittamiseen epätäydellisissä (nykyaikaisten standardien mukaan) editoreissa ilman automaattista tekstinavigointia. Tästä syystä siitä on todennäköisesti tullut vakiokoodityyli WinAPI :ssa .
- Unkarilaista merkintää voidaan pitää vakiona lyhenteiden järjestelmänä. Esimerkiksi haun syöttökenttä ja "Haku"-painike voidaan nimetä nimellä txtSearchja btnSearch; ihmisten lukumäärä voidaan kirjoittaa muodossa manCounttai nMen. Tämän käytännön avulla voit tehdä muuttujien nimistä lyhyitä ja samalla merkityksellisiä.
- Ratkaisee tunnisteristiriidat: .Point::Point(int aX, int aY) : x(aX), y(aY) {}
Vitsi
Tätä nimeämistyyliä kutsutaan "Unkarilaiseksi" merkinnällä sen keksineen Microsoftin ohjelmointijohtajan Charles Simonyin syntymäpaikan mukaan. (Ei siksi, että sen käyttäminen saa ohjelmat näyttämään unkariksi kirjoitetuilta [3] )
A. Golub. Riittävän pitkä köysi.
Haitat
- Jotkut ohjelmoijat huomaavat, että etuliitteiden käyttö tekee muuttujien nimistä vähemmän selkeitä ja huonontaa siten koodin luettavuutta. [neljä]
- Jos muuttujan nimi ilman etuliitteitä on tuntematon, sen etuliitteiden palauttaminen on joskus vaikeaa.
- Jos automaattinen dokumentointijärjestelmä ei ymmärrä etuliitejärjestelmää, se lajittelee aakkosluettelon etuliitteen mukaan, mikä voi vaikuttaa haitallisesti dokumentaation laatuun. Toimintojen nimissä ei kuitenkaan yleensä ole etuliitteitä.
- Useiden etuliitteiden tallentamisesta isojen kirjainten ja alaviivojen toistuvan käytön vuoksi voi tulla "tanssia painikkeella ⇧ Shift".
- Nykyaikaisiin koodieditoreihin sisältyvien navigointityökalujen avulla voit jo nähdä minkä tahansa muuttujan tyypin ja siirtyä nopeasti siihen pisteeseen, jossa se on määritelty - eli etuliiteiden käyttö voi olla tarpeetonta.
- Kun muutat tyyppiä, sinun on vaihdettava muuttujan nimi (kaikki koodieditorit eivät voi tehdä tätä automaattisesti). [neljä]
- Muuttujan nimessä olevan muuttujan tyypin määrittämiseen on muitakin tapoja: esimerkiksi sanat on , has jne. loogiselle tyypille ( IsLoggedIn), count laskurille ( RefCount), monikko taulukolle ( UserIds). Kielessä, jossa isot kirjaimet eivät vastaa pieniä kirjaimia, isot kirjaimet voivat myös koodata jotain.
Tunnettu unkarilaisen merkinnän vastustaja on Linus Torvalds : "Muuttujan tyypin kirjoittaminen sen nimeen (ns. unkarilainen notaatio) on virheellinen - kääntäjä tuntee jo tyypit ja osaa tarkistaa ne, mikä hämmentää ohjelmoijaa. ” [5] .
Mielenkiintoisia faktoja
- Unkarin merkinnöissä käytetty kirjainyhdistelmä sz , on todellakin laajalti käytetty unkarissa ja tarkoittaa ääntä /s/ [6] . Joten, säveltäjä Franz Liszt unkarin Liszt .
Katso myös
Muistiinpanot
- ↑ Unkarin merkintä . Haettu 14. kesäkuuta 2022. Arkistoitu alkuperäisestä 10. kesäkuuta 2006. (määrätön)
- ↑ Joel Spolsky .
Kuinka saada väärä koodi näyttämään väärältä Arkistoitu 19. heinäkuuta 2006 Wayback Machinessa
- ↑ Unkarin kieltä , vaikka siinä on latinalaiset aakkoset, pidetään erittäin lukukelvottomana tietämättömille.
- ↑ 1 2 Inside C++ - Unkarin merkintä . Haettu 12. marraskuuta 2008. Arkistoitu alkuperäisestä 30. lokakuuta 2008. (määrätön)
- ↑ "Linux-ytimen koodaustyyli" Arkistoitu 23. syyskuuta 2005. . Linux-ytimen dokumentaatio (englanniksi).
- ↑ Tietoja digrafista sz englanninkielisessä Wikipediassa