La
notazione ungara, o notazione ungherese (dall'inglese
hungarian notation), è una convenzione adottata nella programmazione e riguarda il nome da attribuire agli oggetti definiti nel proprio codice; essa consiste nell'includere, nel nome degli oggetti (ad esempio con un prefisso), informazioni come il tipo e la visibilità dell'oggetto stesso. Tale notazione deve il suo nome alla nazionalità del suo creatore,
Charles Simonyi, noto per aver lavorato ad alcuni dei più importanti progetti di Microsoft.
Esistono
pareri discordanti circa l'utilità di tale tecnica nella programmazione
object-oriented. C'è chi ne comprende l'utilità per taluni linguaggi di programmazione (C++
in primis) e chi invece non riesce a coglierne alcuna utilità o, addirittura, la considera una tecnica che crea problemi nelle fasi di scrittura del codice.
In particolare
Robert Oslow ha scritto che la
notazione ungara, pur non essendo utile in un linguaggio puramente ad oggetti, può tornare utile in un linguaggio come C++ — che non è un linguaggio ad oggetti puro — per specificare, nel nome degli oggetti, se un membro di una classe è privato, statico, o altro; per citare un esempio, MFC utilizza come prefisso al nome degli oggetti
m_ per un membro,
c_ per un membro statico.
Le
critiche alla
notazione ungara sono rivolte al suo utilizzo per specificare il tipo degli oggetti. Al riguardo
Linus Torvalds ha scritto:
"Il compilatore conosce comunque il tipo e lo può verificare, e l'unica cosa che fa la notazione ungherese è confondere il programmatore".
Bill Davis ha, invece definito la
notazione ungara un metodo che preclude la possibilità di portare il codice da una piattaforma a 16 bit ad una a 32 bit.
Infine
Robert C. Martin ha affermato di non considerare utile la
notazione ungara per i linguaggi fortemente tipizzati; in tali casi, essa sarebbe ridondante e aumenterebbe semplicemente la complessità. Secondo
Martin, essa è una tecnica per commentare il codice, ma la sintassi dei commenti non è controllata dal compilatore e quindi non è detto che essi siano accurati.