# Notació hongaresa

En programació informàtica, la notació hongaresa és un sistema usat normalment per crear els noms de variables. També s'utilitza per anomenar les instàncies d'objectes en llenguatges de programació visuals, com ara Visual Basic. El nom de la notació prové del fet que el seu inventor, Charles Simonyi, va néixer a Hongria. Aquesta convenció és molt poc utilitzada en les velles versions de Visual Basic. Però és molt utilitzada pels programadors de Microsoft, i en particular en la programació del sistema operatiu Windows. Consisteix en prefixos en minúscules que s'afegeixen als noms de les variables, i que indiquen el seu tipus. La resta del nom indica, el més clarament possible, la funció que realitza la variable.

## Exemples

    B Booleà (int)
    By BYTE o uchar (unsigned char)
    C Caràcter (un byte)
    Dw Sencer llarg de 32 bits sense signe (double word)
    F Flags empaquetats en un enter de 16 bits
    H Manipulador de 16 bits (handle)
    L Sencer llarg de 32 bits
    LBL Objecte Label
    Lp Punter a enter llarg de 32 bits
    Lpfn Punter llarg a una funció que retorna un enter
    Lpsz Punter llarg a una cadena acabada amb zero
    N Enter de 16 bits
    P Punter a enter de 16 bits
    I Enumeració
    Pt Coordenades (x, y) empaquetades en un enter de 32 bits
    Rgb Valor de color en el Model de color RGB empaquetat en un enter de 32 bits
    SZ Cadena acabada en zero
    Txt Caixes de text
    W Enter curt de 16 bits sense signe (word)

### Exemples

* NContador: la variable és un enter que s'usarà com a comptador.
* SzNombre: una cadena acabada amb zero la qual emmagatzema un nom.
* BRespuesta: una variable booleana que emmagatzema una resposta.
* TxtHora: una instància d'un objecte textbox que emmagatzema l'hora.
txtbox1: txt "CVE".

## Situació actual

Avui dia hi ha més detractors que impulsors de la notació hongaresa. De fet, se sol qualificar d'una tècnica que a la llarga provoca més complexitat que ajuda a les tasques de manteniment. Sobretot quan la majoria d'entorns de desenvolupament actuals, en particular els que s'usen amb llenguatges estàticament tipats, ofereixen mecanismes senzills per esbrinar el tipus de les variables sense recórrer a la recerca de la seva declaració.
No obstant això, sembla que, com en la majoria de les situacions, en el medi hi ha la virtut, ja que per molts editors de codi intel·ligent que utilitzem, la majoria de projectes sempre acaben tenint certes parts escrites en llenguatges dinàmicament tipats, especialment JavaScript, l'únic implementat per la majoria de navegadors web per a executar codi en client
Com que a l'hora de realitzar projectes se solen establir prèviament unes Coding Style Guidelines (Guies d'estil de programació), no convé fer diferents per a cada llenguatge i es podria definir un estàndard de notació hongaresa que tingui un lleuger compromís amb la facilitat de reconeixement de tipus, sense que arribi a suposar un infern sobre la complexitat de lectura de codi.
Exemple:
    A d 'array'. Per vectors/matrius/llistes de n dimensions ordenats escalars.
    B de 'booleà'. Per variables que prenguin només dos tipus de valors.
    C de 'char'. Per al tipus primitiu de caràcter alfanumèric individual.
    D de 'double'. Per tipus numèrics d'alta precisió, com double o float.
    I de 'event'. Per a esdeveniments.
    F de 'funció'. Només la utilitzarem davant de funcions quan es tractin de funcions que s'afegeixin com a observadors d'un esdeveniment (ja que usar aquesta notació per a qualsevol mètode o funció seria bastant molest).
    G de 'delegate'. Per tipus delegats.
    H de 'Hashtable'. Col·leccions ordinadors mitjançant clau hash (hUsuarios ["juan23"]).
    I de 'int'. Per nombres enters en general, tant sencers normals com aquells tipus sencers de més capacitat (com long).
    L de 'lock'. Per objectes de control que ens facilitin l'ús de exclusions mútues, cadenats i semàfors.
    N d 'enum'. Per tipus enumerats.
    O de 'objecte'. Per objectes en general (no s'ha d'usar la notació hongaresa per distingir entre tipus d'objectes, excepte escasses excepcions).
    P de 'punter'. Per llenguatges amb aritmètica de punters.
    S de 'string'. Per variables de tipus cadena de text, ja siguin nadius o arrays de chars. Aquest tipus de dades és molt habitual en llenguatges sense lògica de punters. Si es fes servir l'objecte de tipus "String" en aquests casos, acudirem a aquest identificador en lloc de com a 'o' d'objecte.
    T de 'struct'. Similar al 'o' d'objectes, aquest es faria servir per a variables de tipus struct en general (és a dir, objectes de tipus primitiu).
    V de 'variable'. Per a variables que adquireixin diferents tipus de valors. Normalment només acudirem a aquesta opció en llenguatges no tipados (com Javascript/ECMAScript). La farem servir quan no estiguem segurs del tipus de valor que albergarà una variable. També pot valer per a objectes que tinguin un tipus genèric T.
    I de 'byte'.
Aquest exemple de notació hongaresa no semblarà tan críptic i estrany com el que s'ha posat d'exemple al principi de l'article, en el qual es arribaven a utilitzar fins a tres lletres per denotar el tipus.