Notación húngara

En programación informática, la notación húngara es un sistema convencional usado para nombrar variables en un programa. Su nombre proviene de que su inventor, Charles Simonyi, nació en Hungría.

Consiste en prefijos en minúsculas que se añaden a los nombres de las variables y que indican su tipo. El resto del nombre indica, lo más claramente posible, la función que realiza la variable.

Es una convención que ha sido muy utilizada históricamente, pero actualmente está en desuso[1]. El motivo es la mejora de las herramientas de programación, que muestran información contextual sobre la variable y de los estilos de programación que, en muchos casos, favorecen la declaración de las variables más próxima a su uso, en lugar de la más tradicional declaración en la cabecera del archivo, o del uso de variables globales.

Siendo una convención, su aplicación, depende del estilo de programación que se elija para el desarrollo. A la hora de optar por esta convención, se tiene muy en cuenta el lenguaje que se esté utilizando. En los lenguajes con tipado fuerte y que diferencian entre mayúsculas y minúsculas, se tenderá a no usarla; por ejemplo en Java o C_Sharp. Será más fácil encontrarla, en cambio, en lenguajes de tipado débil o que no diferencian entre mayúsculas y minúsculas, como por ejemplo Visual Basic.


Ejemplos

Prefijo Significado
bBooleano (int)
byBYTE o UCHAR (unsigned char)
cCarácter (un byte)
dwEntero largo de 32 bits sin signo (double word)
fFlags empaquetados en un entero de 16 bits
hManipulador de 16 bits (handle)
lEntero largo de 32 bits
lblObjeto Label
lpPuntero a entero largo de 32 bits
lpfnPuntero largo a una función que devuelve un entero
lpszPuntero largo a una cadena terminada con cero
nEntero de 16 bits
pPuntero a entero de 16 bits
eEnumeración
ptCoordenadas (x, y) empaquetadas en un entero de 32 bits
rgbValor de color RGB empaquetado en un entero de 32 bits
szCadena terminada en cero
txtCajas de texto
wEntero corto de 16 bits sin signo (word)
  • nContador: la variable es un entero que se usará como contador.
  • szNombre: una cadena terminada con cero la cual almacena un nombre.
  • bRespuesta: una variable booleana que almacena una respuesta.
  • txtHora: una instancia de un objeto textbox que almacena la hora.

Situación actual

Hoy en día existen más detractores que impulsores de la notación húngara. La mayoría de las herramientas de desarrollo actuales, en particular los que se usan con lenguajes estáticamente tipados, ofrecen mecanismos sencillos para averiguar el tipo de las variables sin recurrir a la búsqueda de su declaración.

Ejemplo notaciones de 1 carácter

Prefijo Significado
a'array'. Para vectores/matrices/listas de n dimensiones ordenados escalarmente.
b'booleano'. Para variables que tomen sólo dos tipos de valores.
c'char'. Para el tipo primitivo de carácter alfanumérico individual.
d'double'. Para tipos numéricos de alta precisión, como double o float.
e'event'. Para eventos.
f'función'. Sólo la utilizaremos delante de funciones cuando se traten de funciones que se añadan como observadores de un evento (ya que usar esta notación para cualquier método o función sería bastante engorroso).
g'delegated'. Para tipos delegados.
h'hashtable'. Colecciones ordenables mediante clave hash (hUsuarios[“juan23”]).
i'int'. Para números enteros en general, tanto enteros normales como aquellos tipos enteros de más capacidad (como long).
l'lock'. Para objetos de control que nos faciliten el uso de exclusiones mutuas, candados y semáforos.
n'enum'. Para tipos enumerados.
o'objeto'. Para objetos en general (no se debe usar la notación húngara para distinguir entre tipos de objetos, salvo escasas excepciones).
p'puntero'. Para lenguajes con aritmética de punteros.
s'string'. Para variables de tipo cadena de texto, ya sean nativos o arrays de chars. Este tipo de datos es muy habitual en lenguajes sin lógica de punteros. Si se usara el objeto de tipo “String” en estos casos, acudiremos a este identificador en lugar de al ‘o’ de objeto.
t'struct'. Similar al 'o' de objetos, este se usaría para variables de tipo struct en general (es decir, objetos de tipo primitivo).
v'variable'. Para variables que adquieran diferentes tipos de valores. Normalmente sólo acudiremos a esta opción en lenguajes no tipados (como JavaScript/EcmaScript). La usaremos cuando no estemos seguros del tipo de valor que albergará una variable. También puede valer para objetos que tengan un tipo genérico T.
y'byte'.

Este ejemplo de notación húngara no parecerá tan crítico y extraño como el que se ha puesto de ejemplo al principio del artículo, en el cual se llegaban a utilizar hasta cuatro letras para denotar el tipo.

Véase también

Referencias

  1. Krzysztof Cwalina. «General Naming Conventions - Framework Design Guidelines». learn.microsoft.com (en inglés estadounidense). Consultado el 26 de abril de 2023.
Este artículo ha sido escrito por Wikipedia. El texto está disponible bajo la licencia Creative Commons - Atribución - CompartirIgual. Pueden aplicarse cláusulas adicionales a los archivos multimedia.