Sei sulla pagina 1di 7

NOTACIN HNGARA

La notacin hngara es una convencin de nombres identificador de programacin


informtica, en la que el nombre de una variable o funcin indica el tipo o uso previsto. Hay dos
tipos de notacin hngara: Sistemas de notacin hngara y aplicaciones notacin hngara.
La notacin hngara fue diseada para ser independiente del lenguaje, y encontr su primer
uso importante con el lenguaje de programacin BCPL. Debido BCPL tiene ningn tipo de datos que
no sean la palabra de la mquina, no hay nada en la propia lengua ayuda a un programador recordar
variables de tipos. Notacin hngara tiene como objetivo remediar esto proporcionando el
programador con conocimiento explcito de tipo de datos de cada variable.
En la notacin hngara, un nombre de variable empieza con un grupo de letras minsculas
que son mnemotcnicos para el tipo o propsito de esa variable, seguido por el nombre que el
programador ha elegido; esta ltima parte a veces se distingue por ser el nombre dado. El primer
carcter del nombre que puede ser capitalizado para separarlo de los indicadores de tipo. De lo
contrario el caso de este carcter denota alcance.
Historia
La notacin hngara original, que ahora se llamara Aplicaciones hngaro, fue inventada por
Charles Simonyi, un programador que trabajaba en Xerox PARC circa 1972-1981, y que ms tarde se
convirti en arquitecto jefe de Microsoft. Puede haber sido derivado del principio anterior de utilizar
la primera letra del nombre de una variable para ajustar su tipo - por ejemplo, las variables cuyos
nombres comenzaron con las letras I a N en FORTRAN son enteros por defecto.
La notacin es una referencia a la nacin de Simonyi de origen, nombres de las personas
hngaras se "invierten" en comparacin con la mayora de los nombres europeos, el apellido
precede al nombre. Por ejemplo, el nombre anglicismo "Charles Simonyi" en hngaro era
originalmente "Charles Simonyi". De la misma manera el nombre del tipo precede al "nombre" en
la notacin hngara en lugar de la ms natural, la mayora europeos, "type ltima" Smalltalk
nombramiento estilo por ejemplo unPunto y lastPoint. Este estilo de denominacin esta ltima era
ms comn en el Xerox PARC durante el mandato de Simonyi all.
El nombre Aplicaciones hngaro fue acuado desde la convencin se utiliz en la divisin
de aplicaciones de Microsoft. Sistema hngaro desarroll ms tarde en el equipo de desarrollo de
Microsoft Windows. El artculo de Simonyi se refiri a los prefijos utilizados para indicar el "tipo" de
la informacin que se almacena. Su propuesta fue en gran parte que ver con nombres de
identificadores de decoracin en base a la informacin semntica de lo que almacenan, en
consonancia con aplicaciones hngaro. Sin embargo, sus sugerencias no fueron enteramente
distinto de lo que se conoce como Sistemas de Hungra, ya que algunos de sus prefijos propuestos
contienen poca o ninguna informacin semntica.
La notacin hngara plazo es memorable por muchas personas debido a que las cadenas de
consonantes impronunciables vagamente se parecen a la consonante-rica ortografa de algunas
lenguas de Europa del Este a pesar de que Hungra es un lenguaje Uralic, ya diferencia de las lenguas

eslavas es bastante rico en vocales. Por ejemplo, el prefijo de cadena terminada en cero "sz"
tambin es una letra del alfabeto hngaro.
Sistemas vs Aplicaciones hngaro
Cuando los sistemas de notacin y la notacin aplicaciones difieren es en el fin de los prefijos.
En la notacin hngara Sistemas, el prefijo codifica el tipo de datos real de la variable. Por ejemplo:

lAccountNum: variable es un entero largo;


arru8NumberList: variable es una matriz de un entero sin signo de 8 bits;
szName: variable es una cadena terminada en cero, lo que fue uno de los prefijos
sugeridos originales de Simonyi.
Breadline: funcin con un cdigo de retorno de valor de byte.

Aplicaciones notacin hngara se esfuerza para codificar el tipo de datos lgicos en lugar del tipo
de datos fsicos, de esta manera, da una idea de lo que el propsito de la variable es, o lo que
representa.

rwPosition: variable representa una fila;


usName: variable representa una cadena insegura, que debe ser "saneada" antes de su
uso
strNombre: Variable representa una cadena que contiene el nombre, pero no especfica
cmo se aplica esa cadena.

La mayora, pero no todos, de los prefijos Simonyi sugeridas son de naturaleza semntica. Los
siguientes son ejemplos del documento original:

pX: es un puntero a otro tipo X, lo que contiene muy poca informacin semntica.
d es un prefijo que significa diferencia entre dos valores, por ejemplo, dY podra
representar una distancia a lo largo del eje Y de un grfico, mientras que slo una
variable llamada y podra ser una posicin absoluta. Esto es totalmente de naturaleza
semntica.
Sz: es una cadena nula o terminada en cero. En C, este contiene alguna informacin
semntica, ya que no est claro si una variable de tipo char * es un puntero a un carcter
individual, un conjunto de caracteres o una cadena terminada en cero.
W: representa una variable que es una palabra. Este no contiene esencialmente
informacin semntica en absoluto, y probablemente ser considerado Sistemas
hngaro.
b: representa un byte, que en contraste con w pueda disponer de informacin
semntica, porque en C el nico tipo de datos byte de tamao es el carbn, por lo que
stos se utilizan a veces para contener valores numricos. Este prefijo puede eliminar la
ambigedad entre si la variable es la celebracin de un valor que debe ser tratado como
un carcter o un nmero.

Mientras la notacin siempre utiliza letras minsculas iniciales como mnemotcnicos, no


prescribe la nemotcnica s mismos. Hay varias convenciones ampliamente utilizadas, pero
cualquier conjunto de letras se pueden utilizar, siempre y cuando sean compatibles dentro de un
cuerpo de cdigo dado.
Es posible que el cdigo utilizando aplicaciones notacin hngara para contener a veces
Sistemas hngaros al describir las variables que se definen nicamente en funcin de su tipo.
Relacin con sigilos
En algunos lenguajes de programacin, una notacin parecida llama ahora sigilos est
integrado en el lenguaje y aplicadas por el compilador. Por ejemplo, en algunas formas de BASIC,
name $ nombres una cadena y count% nombres de un nmero entero. La principal diferencia entre
la notacin y sigilos hngaro es que los sigilos declarar el tipo de la variable para el compilador,
mientras que la notacin hngara es puramente un esquema de nombres.
Ejemplos

bBusy: boolean
chInitial: char
cApples: recuento de los elementos
dwLightYears: palabra doble
fBusy: boolean
nSize: integer o recuento
ISIZE: integer o ndice
fpPrice: coma flotante
dbPi: double
Pfoo: Puntero
rgStudents: matriz o rango
szLastName: string terminado en cero
u32Identifier: entero sin signo de 32 bits
stTime: Estructura de la hora del reloj
fnFunction: nombre de la funcin

Los mnemnicos para punteros y matrices, que no son tipos de datos reales, son seguidos
generalmente por el tipo del elemento de datos en s:

pszOwner: Puntero a una cadena terminada en cero


rgfpBalances: array de valores de punto flotante
aulColors: array de unsigned long

Mientras que la notacin hngara se puede aplicar a cualquier lenguaje de programacin y


el medio ambiente, que fue ampliamente adoptado por Microsoft para su uso con el lenguaje C, en
particular, para Microsoft Windows, y su uso sigue siendo limitado en gran medida a esa rea. En
particular, el uso de la notacin hngara fue ampliamente evangelizada por Charles Petzold

"Programming Windows", el libro original de programacin API de Windows. Por lo tanto, muchas
construcciones comnmente vistos de notacin hngara son especficos de Windows:

Para los programadores que aprendieron de programacin de Windows en C,


probablemente los ejemplos ms memorables son el wParam y lParam para la
funcin WindowProc.
hwndFoo: identificador de una ventana
lpszBar: puntero largo a una cadena terminada en cero

La notacin a veces se extiende en C para incluir el mbito de una variable, separados por un guin
bajo. Esta extensin se utiliza a menudo tambin sin el tipo de especificacin de Hungra:

g_nWheels: miembros de un espacio de nombres global, entero


m_nWheels: miembros de una estructura/clase, nmero entero
m_wheels, _Ruedas: miembros de una estructura/clase
s_wheels: miembros estticos de una clase
c_wheels: Miembro esttico de una funcin

Ventajas
Los partidarios argumentan que los beneficios de la notacin hngara incluyen:

El tipo de variable se puede ver a partir de su nombre. .


El tipo de valor devuelto por una funcin se determina sin bsqueda
El formato de los nombres de las variables puede simplificar algunos aspectos de
refactorizacin de cdigo.
Mltiples variables con semntica similares pueden ser utilizados en un bloque de
cdigo: dwWidth, iWidth, fWidth, dancho
Los nombres de variables pueden ser fcil de recordar de conocer slo sus tipos.
Esto lleva a los nombres de variables ms consistentes
Tipo inapropiados fundicin y operaciones con tipos incompatibles se pueden detectar
fcilmente durante la lectura de cdigo de
Es til con lenguajes basados en cadenas donde numricos son cadenas
En Aplicaciones hngaro, los guardias nombre de la variable contra el uso en una
operacin inadecuada con el mismo tipo de datos al hacer que el error evidente como
en:
heightWindow = window.getWidth
Al programar en un lenguaje que utiliza tipado dinmico o que est completamente sin
tipo, los adornos que se refieren a los tipos dejan de ser redundante. Estos idiomas no
suelen incluir declaraciones de tipos, por lo que las nicas fuentes de qu tipos se
permiten son los mismos nombres, documentacin, tales como comentarios y por la
lectura del cdigo de entender lo que hace. En estos idiomas, incluyendo una indicacin
del tipo de una variable puede ayudar al programador. Como se mencion
anteriormente, la notacin hngara se expandi en un lenguaje.

En programas complejos con una gran cantidad de objetos globales, con una notacin
bsica prefijo puede facilitar el trabajo de bsqueda de la parte interior del editor.
Escribiendo btn y presionando causas del editor para que aparezca una lista de los
objetos Button.
La aplicacin de la notacin hngara de una manera ms estrecha, tales como la
aplicacin slo para variables miembro ayuda a evitar la colisin de nombres.

Desventajas
La mayora de los argumentos en contra de la notacin hngara son objeto los sistemas de notacin
hngara, no aplicaciones notacin hngara. Algunos temas posibles son:

La notacin hngara es redundante cuando el tipo de comprobacin se realiza por el


compilador. Compiladores para lenguajes proporcionan tipo de comprobacin de
garantizar el uso de una variable es coherente con el tipo de forma automtica, los
controles de los ojos son redundantes y sujeto a errores humanos.
Todos los entornos de desarrollo integrados modernos muestran los tipos de variables
en la demanda, y de forma automtica operaciones de bandera que utilizan tipos
incompatibles, por lo que la notacin en gran medida obsoleta.
Notacin hngara vuelve confuso cuando se utiliza para representar varias propiedades,
como en a_crszkvc30LastNameCol: un argumento de referencia constante, que sostiene
el contenido de una base de datos de la columna Apellidos de tipo VARCHAR que es
parte de la clave primaria de la tabla.
Puede dar lugar a incoherencias cuando el cdigo se modifica o portado. Si se cambia el
tipo de una variable, ya sea la decoracin en el nombre de la variable ser incompatible
con el nuevo tipo, o el nombre de la variable debe ser cambiado. Un ejemplo muy
conocido es el tipo WPARAM estndar, y el parmetro formal wParam acompaante en
muchas declaraciones de funcin de sistema de Windows. La 'w' significa 'palabra',
donde 'palabra' es el tamao de la palabra nativa de la arquitectura de hardware de la
plataforma. Originalmente era un tipo de 16 bits en arquitecturas de palabras de 16 bits,
pero se cambi a una de 32 bits en arquitectura de palabras de 32 bits o 64 bits de tipo
de arquitecturas de palabras de 64 bits en versiones posteriores del sistema operativo
sin perder su nombre original. La impedancia de semntica, y por lo tanto la confusin
programador y la inconsistencia de plataforma en plataforma, es en el supuesto de que
'w' significa 16 bits en los diferentes entornos.
La mayor parte del tiempo, sabiendo que el uso de una variable implica conocer su tipo.
Por otra parte, si no se conoce el uso de una variable, no puede deducirse de su tipo.
Hace cdigo menos legible, por ofuscar el propsito de la variable con el tipo de huelga
y los prefijos de alcance.
La informacin de tipo adicional puede sustituir insuficientemente nombres ms
descriptivos. Por ejemplo sDatabase no le dice al lector lo que es. databaseName podra
ser un nombre ms descriptivo.

Cuando los nombres son suficientemente descriptivos, la informacin de tipo adicional


puede ser redundante. Por ejemplo firstName es ms probable una cadena. As
nombrarlo sFirstName slo aade confusin al cdigo.
Es difcil recordar los nombres.

Opiniones notables

Robert C. Martin:
"Hoy en da... HN y otras formas de codificacin tipo son simplemente obstculos. Ellos
hacen que sea ms difcil para cambiar el nombre o el tipo de una variable, funcin, o
miembro de la clase. Ellos hacen que sea ms difcil de leer el cdigo. Ellos crean la
posibilidad de que el sistema de codificacin se induzca a error al lector.
Linus Torvalds:
"Codificacin del tipo de una funcin en el nombre es cerebro daado-el compilador
sabe los tipos de todos modos y puede comprobar aquellos, y slo confunde el
programador."
Steve McConnell:
"A pesar de la convencin de nomenclatura de Hungra ya no es de uso generalizado, la
idea bsica de la estandarizacin en concisas, precisas abreviaturas sigue teniendo
valor. Prefijos estandarizados permiten comprobar los tipos de precisin cuando se est
utilizando tipos de datos abstractos que el compilador no puede necesariamente
marque.
Bjarne Stroustrup:
"No, no lo recomiendo" hngaro. Considero 'hngaro' una tcnica que puede ser til
en las lenguas sin tipo, pero es totalmente inadecuado para un lenguaje de
programacin que soporte genrico y programacin orientada a objetos, tanto de los
que hacen hincapi en la seleccin de las operaciones en funcin del tipo un
argumentos. En este caso, "la construccin del tipo de un objeto en los nombres
'simplemente complica y reduce al mnimo la abstraccin".
Joel Spolsky:
"Si usted lee el artculo de Simonyi de cerca, lo que quera llegar era el mismo tipo de
convencin de nombres como lo haca en mi ejemplo anterior donde decidimos que
significa eso de" cadena insegura "y s significa" cadena de seguridad". Son los dos tipos
cadena. El compilador no le ayudar si asigna una a la otra e Intellisense no le dir
bupkis. Pero son semnticamente diferentes. Tienen que ser interpretado de manera
diferente y se tratan de manera diferente y algn tipo de funcin de conversin tendr
que llamar si asignar una a la otra, o usted tendr un error de tiempo de ejecucin. Si
tiene suerte. Todava hay una enorme cantidad de valor a las aplicaciones de Hungra,
ya que aumenta la funcin de proximidad en el cdigo, lo que hace que el cdigo sea
ms fcil de leer, escribir, depurar y mantener, y lo ms importante, tiene un cdigo
incorrecto mirar mal. "

Instrucciones de diseo de Microsoft desalientan a los desarrolladores de utilizar la


notacin hngara cuando eligen nombres para los elementos de. NET Class Libraries,
aunque era comn en las plataformas de desarrollo de Microsoft anteriores como Visual
Basic 6 y anteriores. Estas Instrucciones de diseo no se pronuncian sobre las
convenciones de nomenclatura para las variables locales dentro de funciones.