Sei sulla pagina 1di 14

En programacin informtica, la notacin hngara es un sistema usado

normalmente para crear los nombres de variables. Tambin se utiliza para


nombrar las instancias de objetos en lenguajes de programacin visuales, como
por ejemplo Delphi. El nombre de la notacin proviene del hecho de que su
inventor, Charles Simonyi, naci en Hungra.
Consiste en prefijos en minsculas que se aaden a los nombres de las variables
y que indican su tipo. El resto del nombre indica, lo ms claramente posible, la
funcin que realiza la variable.

Ejemplos[editar]
Prefijo

Significado

Booleano (int)

by

BYTE o UCHAR (unsigned char)

Carcter (un byte)

dw

Entero largo de 32 bits sin signo (double word)

Flags empaquetados en un entero de 16 bits

Manipulador de 16 bits (handle)

Entero largo de 32 bits

lbl

Objeto Label

lp

Puntero a entero largo de 32 bits

lpfn

Puntero largo a una funcin que devuelve un entero

lpsz

Puntero largo a una cadena terminada con cero

Entero de 16 bits

Puntero a entero de 16 bits

Enumeracin

pt

Coordenadas (x, y) empaquetadas en un entero de 32 bits

rgb

Valor de color RGB empaquetado en un entero de 32 bits

sz

Cadena terminada en cero

txt

Cajas de texto

Entero 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.

Situacin actual

Hoy da existen ms detractores que impulsores de la notacin hngara. De hecho, se suele


calificar de una tcnica que a la larga provoca ms complejidad que ayuda a la mantenibilidad.
Mxime cuando la mayora de entornos de desarrollo actuales, en particular los que se usan
con lenguajes estticamente tipados, ofrecen mecanismos sencillos para averiguar el tipo de
las variables sin recurrir a la bsqueda de su declaracin.
Sin embargo, parece que, como en la mayora de las situaciones, en el medio est la virtud,
pues por muchos editores de cdigo inteligente que utilicemos, la mayora de proyectos
siempre acaban teniendo ciertas partes escritas en lenguajes dinmicamente tipados, en
especial JavaScript, el nico implementado por la mayora de navegadores web para ejecutar
cdigo en cliente
Puesto que a la hora de realizar proyectos se suelen establecer previamente unas Coding
Style Guidelines (Guas de estilo de programacin), no conviene hacerlas distintas para cada
lenguaje y se podra definir un estndar de notacin hngara que tenga un ligero compromiso
con la facilidad de reconocimiento de tipos, sin que llegue a suponer un infierno sobre la
complejidad de lectura de cdigo.

Ejemplo notaciones de 1 carcter[

Prefij

Significado

'array'. Para vectores/matrices/listas de n dimensiones ordenados escalarmente.

'booleano'. Para variables que tomen slo dos tipos de valores.

'char'. Para el tipo primitivo de carcter alfanumrico individual.

'double'. Para tipos numricos de alta precisin, como double o float.

'event'. Para eventos.

'funcin'. Slo la utilizaremos delante de funciones cuando se traten de funciones que


f

se aadan como observadores de un evento (ya que usar esta notacin para
cualquier mtodo o funcin sera bastante engorroso).

'delegated'. Para tipos delegados.

'hashtable'. Colecciones ordenables mediante clave hash (hUsuarios[juan23]).

'int'. Para nmeros enteros en general, tanto enteros normales como aquellos tipos
enteros de ms capacidad (como long).

'lock'. Para objetos de control que nos faciliten el uso de exclusiones mutuas,
candados y semforos.

'enum'. Para tipos enumerados.

'objeto'. Para objetos en general (no se debe usar la notacin hngara para distinguir
entre tipos de objetos, salvo escasas excepciones).

'puntero'. Para lenguajes con aritmtica de punteros.

'string'. Para variables de tipo cadena de texto, ya sean nativos o arrays de chars.
s

Este tipo de datos es muy habitual en lenguajes sin lgica de punteros. Si se usara el
objeto de tipo String en estos casos, acudiremos a este identificador en lugar de al
o de objeto.

'struct'. Similar al 'o' de objetos, ste se usara para variables de tipo struct en general
(es decir, objetos de tipo primitivo).

'variable'. Para variables que adquieran diferentes tipos de valores. Normalmente

slo acudiremos a esta opcin en lenguajes no tipados (comoJavaScript/EcmaScript).


La usaremos cuando no estemos seguros del tipo de valor que albergar una
variable. Tambin puede valer para objetos que tengan un tipo genrico T.

'byte'.

Este ejemplo de notacin hngara no parecer tan crtico y extrao como el que se ha puesto
de ejemplo al principio del artculo, en el cual se llegaban a utilizar hasta cuatro letras para
denotar el tipo.

Notacin Hngara
Publicado en 25/Sep/2012 CodeJobs Software y Estndares de codificacin 0
Comentarios
36 96 0
Notaci on hunga

Muchos programadores de Windows utilizan un convenio para nombrar las


variables, denominado Notacin Hngara en honor al famoso programador de
Microsoft Charles Simonyi. Sencillamente, consiste en hacer que el nombre de
una variable empiece con una o ms letras minsculas que indiquen el tipo de
dato de la variable. Esta notacin facilita el seguimiento de la aplicacin y evita
errores.
Por ejemplo el prefijo psz de pszAppNAme significa puntero a una cadena de
caracteres terminada con el carcter nulo (pointer to a string terminated by zero).
Si el prefijo fuera m_psz entonces se trata de un dato miembro de una clase,
definido como un puntero a una cadena de caracteres terminada con el carcter
nulo.

A continuacin les mostramos los prefijos y sus significados.

Espero que a los programadores de Visual C++ o .Net les sirva esta informacin :)

See
more
at:
http://www.codejobs.biz/es/blog/2012/09/25/notacionhungara#sthash.gXo7BpNL.dpuf

Notacin hngara, Historia, Sistemas vs Aplicaciones hngaro, Relacin con sigilos,


Ejemplos, Ventajas, Desventajas, Opiniones notables

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 diseado 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 inventado 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. Sistemas 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
sugeridas 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


especifica 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 utilizados, pero
cualquier conjunto de letras se pueden utilizar, siempre y cuando sean compatibles dentro de
un cuerpo de cdigo dada.

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
tipo cadena. El compilador no le ayudar si asigna una a la otra y 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 tendrn
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.

Potrebbero piacerti anche