¿Sigue siendo la notación húngara de sistemas una práctica útil? [cerrado]

23

Busqué en el foro, pero no pude encontrar las respuestas por qué debería evitarse, solo por qué no es una bala de plata. Entonces no creo que esta pregunta sea un duplicado.

¿Hay un VÁLIDO razón por la que debería olvidar Sistemas de Hungría Estoy acostumbrado a?

Hasta ahora veo los siguientes beneficios al usarlo:

  • Nomenclatura variable constante
  • Verá el tipo sin buscar (intellisense está muerto / indexando la mitad del tiempo, por lo que sigue siendo un motivo válido)
  • La semántica todavía se puede empaquetar en la segunda parte del nombre

Y siguientes inconvenientes:

  • Molesta a algunas personas (no tengo idea de por qué)
  • Si se cambia el tipo, es posible que el tipo no coincida con el nombre de la variable (no creo que sea una razón válida, los tipos se cambian raramente y usted tiene "cambiar el nombre de todo")

Entonces por qué:

vector<string> vecCityNames;
wstring strCity = L"abc";
//more code here
vecCityNames.push_back(strCity);

es peor que:

vector<string> cityNames;
wstring city = L"abc";
//more code here
cityNames.push_back(city);//Are we pushing back int on a queue? Float on a stack? Something else?
Descifrador
fuente
44
si intellisense está muerto, su código no es válido. Si no es válido, ¿por qué asumir que el nombre de la variable es correcto?
Bubblewrap
66
@Bubblewrap: la mayoría de las implementaciones de intellisense se atascan durante 3 segundos ocasionalmente, incluso en código válido. Y a veces no funcionan en absoluto, a pesar de que el código compila y enlaza. Estamos hablando de proyectos de tamaño razonable.
Codificador
99
no debería vectCityNamesser vectStringCityNamestanto para su argumento constante, y esta "pregunta" es más una queja que otra cosa, tiene una decisión decidida, esto debería cerrarse.
8
¿Cuál consideras que es una razón "válida"?
Adam Lear
15
No creo que su segundo ejemplo sea confuso en la forma en que su comentario lo indica. El significado de cityNames.push_back(city)es bastante claro. Es una lista de nombres de ciudades y está agregando uno.
Chris Burt-Brown

Respuestas:

62

Solía ​​usarlo (hace muchos años) y ya no. La razón principal es que es superfluo en los lenguajes OO con tipeo fuerte (C ++, Java) que utilizo la mayor parte de mi carrera. En estos idiomas, si defino bien mis tipos, el compilador puede y hará cumplir la seguridad de tipos para mí. Por lo tanto, los prefijos de nombres son solo un desorden que hace que los nombres sean más largos, por lo que es más difícil de leer y buscar.

En cualquier programa OO bien escrito, la mayoría de sus variables son (referencias a) tipos definidos por el usuario. Si los antepone con la misma etiqueta general (como o"objeto"), no obtendrá ningún beneficio, solo los inconvenientes. Sin embargo, si los prefijas con etiquetas de tipo específico, te encuentras en un laberinto de tratar de encontrar abreviaturas diferentes para miles de tipos diferentes con nombres a menudo similares *, y recordar cambiarlos todos cuando un tipo o nombre cambia (que es no es raro en absoluto en un programa bien mantenido).

Por supuesto, esto no se aplica a los idiomas que no son OO, y puede que no se aplique a los idiomas de tipo débil y / o dinámico (no tengo experiencia con estos, aparte de C). Ni a editores / IDE subóptimos sin un IntelliSense utilizable (o su equivalente local). Y esto es solo mis 2 centavos. Entonces, si la notación húngara funciona para su equipo y su proyecto, hágalo. Lo importante es ponerse de acuerdo en esto (así como en un estilo de codificación consistente en general) antes de que comience el proyecto, y mantenerlo consistente en todo momento.

* A una corta lista de nuestro proyecto actual: tenemos Charge, ChargeBreakdown, ChargeCalculator, ChargeDAO, ChargeDTO, ChargeLineHelper, ChargeMaps, ChargePairy ChargeType, entre otros. Además, también tenemos Contracts, Countries, Checkouts, Checkins ... y esta es solo la letra C, en un proyecto que probablemente ni siquiera sería llamado "de tamaño razonable" por el OP.


Descargo de responsabilidad: en realidad soy húngaro, así que creo que puedo hablar sobre este tema con autoridad ;-)

Péter Török
fuente
"Escritura segura": si C ++ tuviera un sistema de escritura realmente fuerte, no tendría que incrustar los tipos en el nombre de la variable como un truco.
Michael Burge
19
@ MichaelBurge: Ese es el punto. No tienes que hacerlo Porque lo hace
DeadMG
8
+1 para el punto sobre los tipos definidos por el usuario. El uso de variables con nombre iPoso fAmountpuede ser tolerable, pero intente trabajar en una base de código donde cada variable de objeto reciba un prefijo redundante de seis letras que le informa solo que es un "puntero a una estructura".
2
Haría una excepción para las GUI donde necesita almacenar un identificador para cada control además de su valor, por lo que texto y hText en lugar de tener que pensar en un nombre diferente para el cuadro de entrada. Especialmente importante en sistemas donde el identificador es solo un int, no un tipo especial.
Martin Beckett
1
Yo diría que un lugar importante en el que Java debería haber recomendado el uso de la notación húngara es distinguir entre referencias a instancias que pueden estar mutadas pero nunca compartidas (por ejemplo, las char[]contenidas por a StringBuilder), y referencias a instancias que pueden no estar mutadas, pero puede compartirse con cosas que no los mutarán (por ejemplo, la char[]propiedad retenida String, que puede compartirse entre varias Stringinstancias). Ambos campos son del mismo tipo char[], pero contienen cosas que son muy diferentes. Muchos errores relacionados con la mutabilidad provienen de ...
supercat
35

¿Por qué es std::vector<string> vecCityNames;malo?

El problema con la notación húngara, ya que generalmente se usa, es que, si el perfil muestra que los nombres de las ciudades deberían mantenerse en un std::deque, todos los nombres de variables que se refieren a un objeto de ese tipo de repente tendrán un nombre engañoso.

¿Va a cambiar el nombre de todas sus variables? ¿Alguna vez has tratado de hacer eso en un gran proyecto? Con la ayuda de Murphy (y el tipo es increíblemente útil allí), alguien en alguna parte seguramente habrá usado variables llamadas algo así deqCityNames, haciendo que tus cambios rompan la construcción, dejándote sentado durante horas jugando con el código que, durante media década, nadie se atrevió a mirar en, por miedo a ser mordido por una bestia venenosa.

Sin embargo, por lo que sé, por la forma en que Charles Simonyi ideó el húngaro, el prefijo denotaba el uso semántico de las variables , en lugar de su tipo sintáctico . Es decir, el prefijo apropiado para su lista de nombres de ciudades, sin importar en qué tipo se implemente, probablemente sea listCityNames(o lstCityNames, si listno es lo suficientemente críptico para usted).

Pero considero que el prefijo es superfluo, porque el plural ("nombres") ya transmite que se trata de un montón de ciudades. En pocas palabras: cuando elige sus identificadores con cuidado, la notación húngara rara vez se necesita. OTOH, la forma en que se usa comúnmente es, a la larga, realmente dañar el código.

sbi
fuente
66
@Coder: el tipo se utiliza en todo el proyecto y todas las variables de este tipo tendrán el prefijo. Tendrá que renombrar no una variable global, sino cientos de variables locales.
sbi
77
Debería agregar un enlace a la publicación del blog de Joel Spolsky donde ofrece su explicación de por qué usar un tipo variable para generar una notificación húngara es un malentendido de lo que se trata. El suyo es bueno, pero algunas personas podrían estar buscando algo más autorizado y podría usarlo para respaldar su caso. joelonsoftware.com/articles/Wrong.html
Shane Wealti
2
@Coder: Desafortunadamente, typedefes una herramienta seriamente infravalorada
sbi
44
@ Shane: He escrito mi propia opinión sobre el asunto. Si eso encaja con Joel, entonces está bien para mí, porque valoro sus opiniones a pesar de que estoy en desacuerdo con algunos de ellos. Pero no veo la necesidad de apelar a otras "autoridades" para respaldar mi propia opinión cuando eso se basa en más de una década de experiencia duramente ganada. Sin embargo, es bueno que hayas publicado ese enlace, siempre es bueno ver las opiniones de otras personas para comparar.
sbi
44
Hace mucho tiempo, yo era el chico de CVS de la tienda, y uno de los principales desarrolladores cambió las iniciales (cirugía de cambio de sexo, etc., y sus nombres no tenían las mismas iniciales). Cada vez que tocaba un archivo (o uno similar), cambiaba todas sus iniciales a la nueva forma. Encontré esto extremadamente molesto, ya que tendríamos todo tipo de cambios menores en las características históricas, y era difícil averiguar qué había cambiado realmente y por qué. Cambia vecCityNamesa deqCityNamesunos pocos cientos de archivos y haces lo mismo.
David Thornley
15

Por alguna razón, las respuestas existentes aquí parecen estar bailando en torno a la justificación de la notación húngara, sin decirlo directamente. La notación húngara es útil para agregar información de tipo (en un sentido teórico de tipo ) cuando sería difícil hacerlo en el idioma mismo . Como suele suceder, no es tan difícil usar C ++ o el sistema de tipos de Java de tal manera que la notación húngara (como se describe generalmente) es completamente superflua, y esto es probablemente lo que ha llevado a la reacción violenta en su contra: agrega trabajo del programador para mantener esas anotaciones en todas nuestras variables naes, pero proporciona poco o ningún valor adicional (e incluso puede causar daño, ya que el código parece más desordenado).

Por otro lado, si uno restringe el uso de la notación húngara para escribir información (nuevamente, en un sentido teórico de tipo ) que no esnaturalmente encapsulado por el lenguaje, entonces puede ser muy útil. Por ejemplo, C y C ++ pasan referencias de matriz como tipos de puntero, pero las referencias de matriz y los punteros tienen diferentes operaciones que deben realizarse contra ellos: las matrices se pueden indexar más allá del primer elemento, mientras que los punteros no. Esta es información útil que se pierde en el sistema de tipos tan pronto como se pasa una matriz a una función como argumento. Como tal, en nuestro grupo hemos adoptado anotaciones de nombre de variable en código C y C ++ para distinguir si una variable de puntero es en realidad un puntero a un solo elemento o un puntero a una matriz. La adopción de esta convención ha sido en parte responsable de una gran reducción en la ocurrencia de problemas de corrupción de memoria en nuestra base de código.

Aidan Cully
fuente
Lo que hizo que Hungría fallara fue que fue mal utilizado (por el equipo de WinAPI) para codificar el tipo sintáctico de una variable , en lugar de su significado semántico . (Think dwvs cb..) No es que su forma original sea menos útil en los lenguajes OO: un índice sigue siendo un índice, incluso si está almacenado en un tipo de clase en lugar de estar integrado.
sbi
1
+1 por señalar que el argumento real aquí es sobre la teoría de tipos. La notación húngara es una técnica para aumentar el sistema de tipos con información adicional, y como tal debe compararse y contrastarse con otras técnicas para aumentar el sistema de tipos (por ejemplo, plantillas, typedef, etc.), en lugar de ser discutido sobre sus méritos estéticos (o falta del mismo).
Daniel Pryden
1
La pregunta es específicamente sobre "Sistemas húngaros", duplicación sin sentido del tipo declarado, sin información semántica adicional. Puede haber un caso para usar el concepto original de "notación húngara" de etiquetas semánticas para proporcionar información más allá de la permitida por la sintaxis del lenguaje (en algunos lenguajes, incluido C, aunque no C ++, donde puede hacerlo de manera más confiable con tipos definidos por el usuario ), pero de eso no se trata la pregunta.
Mike Seymour
10

Molesta a algunas personas (no tengo idea de por qué)

La razón por la que me molesta es que es un pequeño aumento de velocidad en cada identificador que ralentiza mi escaneo visual del código. ES mAs SI PUEDE KHAD Z PARA q LEER EL CONTENIDO EN INGLÉS COMO TU ESTO.

dfan
fuente
9

Odio es una palabra demasiado fuerte, OMI. Puede escribir su código de la forma que desee; Simplemente prefiero no usar la notación húngara en mi propio código, y dado una opción, también preferiría no tener que leerlo o trabajar con él en el código de otras personas.

Usted preguntó por qué algunas personas encuentran molesta la notación húngara. No puedo hablar por los demás, pero las razones que me molestan son:

  1. Es feo Húngaro toma nombres perfectamente razonables y antepone lo que equivale a un código. Una vez que haya internalizado este código, estoy seguro de que tiene mucho sentido, pero para los no iniciados, parece que alguien desató el nombre de C ++ en mi código fuente.

  2. Es redundante La declaración de una variable establece su tipo; No siento la necesidad de repetir esa información en el nombre de la variable. Esto no es cierto en todos los idiomas: en Perl, por ejemplo, los sigilos como @ o $ antepuestos al nombre de la variable esencialmente definen el tipo de la variable, por lo que no tiene más remedio que usarlos.

  3. Resuelve un problema que no tengo. Los métodos y las funciones no deberían ser tan largos que tenga que buscar mucho para encontrar la declaración de una variable o parámetro local, y no deberían involucrar tantas variables que tenga problemas para hacer un seguimiento de qué es qué. Declarar variables locales cercanas al código que las usa también ayuda a este respecto. Los compiladores de C del pasado requerían que todas las variables locales se declararan al comienzo de la función, pero esa limitación se eliminó hace mucho tiempo.

  4. Esta incompleto. La notación húngara se inventó para un idioma (BCPL) que no tenía un sistema de tipos, y luego se usó ampliamente en un idioma (C) que tenía un número bastante limitado de tipos nativos. En mi opinión, no funciona bien con lenguajes como C ++ o Java que tienen sistemas de tipos extensos. ¿Por qué querría usar un prefijo para indicar el tipo de una variable que es nativa, como char [], pero no una que sea una clase? Alternativamente, si comienzo a inventar prefijos como vecpara clases, terminaré con una gran jerarquía de prefijos paralelos a mi jerarquía de clases. Si eso te atrae, eres bienvenido; solo pensarlo me da dolor de cabeza.

  5. Es ambiguo , al menos como lo entiendo. ¿Cuál es la diferencia entre szFooy pszFoo? El primero es una cadena terminada en cero, y el segundo es un puntero a una cadena terminada en cero. Pero en C o C ++, hasta donde yo sé, cualquier variable de cadena es efectivamente un puntero, entonces, ¿son iguales o no? ¿Cuál debería usar? La respuesta real realmente no importa: el punto es que no puedo discernir la respuesta usando la misma notación que se supone que me ayuda a evitar este tipo de preguntas. La declaración de la variable, por otro lado, tiene que ser inequívoca porque es lo que usa el compilador.

Esas son las cosas que me molestan sobre la notación húngara. Sin embargo, incluso como grupo, no creo que expliquen completamente por qué el húngaro ha sido abandonado en gran medida. Estas son las tres razones principales por las que la mayoría de los programadores no usan el húngaro:

  1. No hay una razón convincente para usarlo. Vea los artículos 3 y 4 anteriores. Probablemente podría vivir con las molestias si el húngaro ofreciera una gran ventaja sobre no usar el húngaro, pero no veo uno, y aparentemente la mayoría de las otras personas tampoco. Quizás lo mejor del húngaro fue que era una convención ampliamente utilizada, y si se apegaba al uso estándar, podría esperar razonablemente que otros programadores con habilidades similares puedan comprender la notación.

  2. Mayor influencia de empresas que no son Microsoft. Probablemente sea justo decir que la mayoría de los programadores que adoptaron la notación húngara lo hicieron porque esa es la forma en que Microsoft escribió el código, y a menudo es más fácil seguir la corriente. Las compañías como Google y Apple tienen esferas de influencia mucho más grandes ahora que en el pasado, y más programadores que nunca están adoptando los estilos de esas compañías y otras que evitan principalmente el húngaro. (Es justo señalar que todavía ve algunos restos, por ejemplo, tanto Google como Apple a menudo usan un prefijo 'k' para nombres constantes).

  3. Microsoft mismo ha abandonado el húngaro. Si revisa la sección de Convenciones de nomenclatura general de Microsoft de sus pautas de codificación, encontrará que dice en negrita: No use la notación húngara.

En consecuencia, una razón válida para dejar de usar la notación húngara es:

La popularidad de la notación húngara ha disminuido hasta el punto de que la convención ya no es útil. Muchos menos programadores usan o incluso entienden el húngaro en estos días y, por lo tanto, la convención es mucho menos efectiva para transmitir la información que se supone que debe hacer. Si considera que es una forma útil de escribir código en sus propios proyectos personales, entonces hay pocas razones para detenerse. Sin embargo, si está escribiendo código como parte de un equipo que no usa húngaro, puede convertirse en un muro entre usted y el resto del equipo en lugar de una estrategia de comunicación exitosa.

Caleb
fuente
"¿Cuál es la diferencia entre szFooy pszFoo"? Uno es char*, el otro char**, me tomó 0,25 segundos para notar la diferencia. Intenta superar eso con Intellisense.
Codificador
2
@Coder, pnFooprobablemente int*no int**, así que debes saber que sztambién significa un puntero. Estoy seguro de que no es un gran problema para el número limitado de tipos que han establecido prefijos húngaros, pero en cualquier proyecto grande el número de tipos definidos es de miles. No sé sobre Intellisense, pero los IDE han mejorado constantemente en los últimos 25 años, y espero que esa tendencia continúe.
Caleb
8

Hasta ahora veo los siguientes beneficios al usarlo:

  • Nomenclatura variable constante

Si nombro todas mis variables después de los personajes de Los Simpson, eso también es consistente, pero ¿es un beneficio?

  • Verá el tipo sin buscar (intellisense está muerto / indexando la mitad del tiempo, por lo que sigue siendo un motivo válido)

Esta es la única razón válida, basada en la debilidad de una herramienta específica ...

  • La semántica todavía se puede empaquetar en la segunda parte del nombre

Eso no es un beneficio; simplemente estás reclamando la ausencia de una desventaja ( masiva ).

Michael Borgwardt
fuente
6

El IDE me dirá trivialmente cuál es el tipo de variable cuando pase el mouse sobre ella. Entonces, ¿por qué molestarse en duplicar esa información? Fundamentalmente, la notación húngara de sistemas es una violación de DRY, con todos los escollos asociados. Cuando esa información es accesible de manera trivial en un entorno moderno, no hay razón para pagar ese precio.

La consistencia no es una ventaja en sí misma. No nombrarlos con el tipo también es consistente. Solo tendría inconsistencia si solo algunas variables tuvieran sus tipos en el nombre. Y agrupar la semántica en la segunda parte es simplemente "Bueno, no es tan malo", todos los demás usan el nombre completo para la semántica. No tienes ninguna ventaja real en la lista.

DeadMG
fuente
44
"El IDE me dirá trivialmente cuál es el tipo de variable cuando pase el mouse sobre ella", en hola mundo, sí. En proyectos más grandes, encuentro esta característica extremadamente poco confiable / lenta. Ctrl + espacio, Ctrl + espacio, Ctrl + espacio, Ctrl + espacio, Ctrl + espacio, no ir ...
Codificador
3
Obtenga un nuevo IDE. O un SSD, que hace maravillas. O simplemente incluya encabezados menos innecesarios.
DeadMG
1
Incluso si el IDE es demasiado lento cuando muestra el tipo de una variable, o si simplemente no es capaz de hacerlo, los métodos / funciones deben mantenerse cortos, de modo que la declaración de una variable nunca esté muy lejos de su uso.
Kevin Panko
6

Otro punto con las formas tradicionales de notación húngara es que generalmente son prefijos. Hay 2 problemas en mi humilde opinión aquí:

1) Un lector humano generalmente quisiera la información más importante primero, en la mayoría de las formas de húngaro, la información codificada es posiblemente menos importante que el nombre mismo.

2) Los prefijos efectúan la ordenación léxica, por lo que si, por ejemplo, va a utilizar un prefijo para denotar interfaces o clases y su IDE proporciona una lista ordenada de estas, las clases / interfaces relacionadas se separarán en esta lista.

jk.
fuente
2

Claramente, esto se reduce a opiniones, por lo que será difícil trabajar con hechos aquí. Personalmente, me parece que el argumento favor de la notación húngara es un poco escaso en los lenguajes fuertemente tipados y orientados a objetos. En mi experiencia, las aplicaciones OO tienden a manejar la complejidad al mantener las clases coherentes y concisas, y lo mismo se puede decir de las funciones. Esto significa que todas las demás cosas son iguales, terminas con:

  • Más clases / tipos
  • Métodos más cortos

Ahora, si desea usar la notación húngara, debe decidir si la aplicará en todos los ámbitos, o simplemente usarla para ciertos tipos y clases privilegiados (como las clases de la biblioteca central). Lo último no tiene sentido para mí, y lo primero lleva al "laberinto de tratar de encontrar abreviaturas diferentes para mil tipos diferentes" a los que se refería Péter Török. Esto significa que hay una sobrecarga significativa en el mantenimiento de las listas de abreviaturas y, por lo general, la "denominación variable constante" desaparece.

El segundo punto sobre métodos más cortos significa que, en la mayoría de los casos, no tendrá que pasar por cientos de líneas de código para verificar qué tipo de variable es. Denominar las variables ligeramente más cuidado eliminaría algunas de sus otras preguntas - por ejemplo, cityNamefrente a solo city. Espero quecityName no sea un flotador :)

En cuanto a por qué molesta a las personas, nuevamente, esto probablemente se deba a estar acostumbrado o no. Pero como alguien que no está acostumbrado, puedo decirle que el uso de la notación húngara interrumpe el flujo de código para mis ojos, lo que dificulta la lectura rápida. En resumen, no estoy diciendo que no tiene ningún mérito (aunque no he discutido algunos de sus inconvenientes, en términos de refactorización, etc), estoy diciendo que el esfuerzo no vale la pena, para el tipo fuerte, lenguajes orientados a objetos.

Daniel B
fuente
1

No sé en el contexto de C ++, pero en el mundo Java / C # preferiría tener nombres significativos que transmitan un lenguaje o contexto de dominio que decirme que strFirstNamees una Cadena; Debería ser obvio que es una cadena, o el nombre debe ser refactorizado para transmitir una mejor intención. Si usted requiere un prefijo para saber el tipo de trabajo, diría que su denominación es inconsistente, no lo suficientemente descriptiva o francamente incorrecta. En los idiomas modernos siempre prefiero nombres más largos que no dejan ambigüedad que los nombres vagos o ambiguos.

La única vez que uso húngaro es para controles ASP.NET, y eso es más, IA) no tiene que escribir algo realmente largo como CustomerFirstNameTextBoxversus txtCustomerFirstName, y B) Entonces Intellisense clasificará todos los tipos de control. Sin embargo, me siento "sucio" al hacerlo, aún no he encontrado una mejor manera.

Wayne Molina
fuente
0

Meh: en realidad se trata de preferencias personales, no importa cuán duro se intente racionalizar sus elecciones. Personalmente me adhiero a la regla "Cuando en Roma ..." y uso húngaro en un código que llama mucho a la API de Windows. Para el código independiente de la plataforma, tiendo a seguir el estilo de la Biblioteca estándar de C ++.

Nemanja Trifunovic
fuente
0

La respuesta se encuentra en esta pregunta: dígame cómo nombrar las siguientes variables:

char * nullTerminatedString;
wchar * nullTerminatedWideString;
string stlString;
wstring stlWideString;
CString mfcString;
BSTR comString;
_bstr_t atlString;

Agregue a estas cadenas constantes, puntero a estos y punteros constantes a estos.

Jaywalker
fuente
3
szFoo, wczFoo, strFoo, (w)strFoo, strFoo, bstrFoo,bstrFoo
Coder
0

No me gusta la forma de notación húngara que describe. ¿La razón? No sirve ningún punto el 90% del tiempo.

Por ejemplo, un poco de código (equivalente a C ++. Realmente escrito en Delphi) de un proyecto heredado que me veo obligado a soportar:

pRecords[0]->FooMember=10;

... pRecord es una variable, es de tipo TRecordList. TRecordList *pRecords[10];

Es una clase que consiste en una organización llamada FooMember que apunta a fFooMember ... o mFooMember dependiendo de si es un "campo" o un "miembro" (pista: son lo mismo)

¿Problemas? fFooMemberpodría ser algo así como FooMember_ porque siempre accederemos a él a través de la propiedad pública de FooMember. pRecords? Es bastante obvio que es un indicador del hecho de que lo desreferencia por todo el lugar. TRecordList? ¿Cuándo puedes confundir un nombre de tipo y un objeto de ese tipo? El compilador le gritará, y los tipos se usan en casi ningún lugar donde están los objetos (excepto por propiedades / métodos estáticos)

Ahora, hay un lugar donde uso la notación húngara. Esto es cuando se trata con muchas variables de IU que tendrían el mismo nombre que otras variables de IU o variables regulares.

Por ejemplo, si tuviera un formulario para su nombre en él.

Tendría una clase llamada FirstNameForm. Dentro de él, lblFirstName y txtFirstName para la etiqueta y el cuadro de texto respectivamente. Y una propiedad pública FirstName para obtener y establecer el nombre en el cuadro de texto.

Esto también podría resolverse mediante el uso de FirstNameLabel y FirstNameTextBox, pero creo que se tarda mucho en escribir. Especialmente con algo como GenderDropDownList y tal.

Básicamente, la notación húngara es, en el mejor de los casos, molesta a nivel sistemático y, en el peor de los casos, dañina (como las otras respuestas dan sobre problemas de refactorización y consistencia).

Earlz
fuente