Notación Húngara en Delphi

No puedo vivir sin usar notación húngara en mis programas Delphi. Es que “me sale solo”, como “si no me pudiera aguantar”.

Intentaré explicar aquí por qué la utilizo y qué es. Señoras, y señores, con ustedes: La notación Húngara

Permitirme comenzar por el final, vamos con una línea de código Delphi:

        oContrato.Procesar(iContrato, sContrato, dContrato, nContrato)

Primero, observar que no he puesto la declaración de variables. Después, observar esa inicial que tienen todas las variables al principio. Eso es notación húngara, iniciar el nombre de las variables con un prefijo predeterminado y que todo el equipo participante en el proyecto conozca.

¿y esto sirve para algo? Pues creo que sí, vamos a comenzar a ver ventajas:

Primero, mi criterio es:

  • o para objetos
  • i para integers
  • s para strings
  • d para fechas (date)
  • n para números (double y similares)

Pues bien, sin haber visto la declaración de variables observar la línea de código del ejemplo:

  • Sabemos que estamos llamando al método Procesar del objeto Contrato. Y que es un objeto, no es un método de un record o similares.
  • Que el primer parámetro es un entero, luego se refiere al nº de contrato. Es solo un ejemplo, pero desde luego no se refiere a la fecha de contrato
  • Igualmente, sContrato es un texto. No debe quedar otra que referirse (por ejmplo) a la descripción del contrato
  • dContrato directamente, la fecha del contrato
  • y finalmente nContrato es el importe contratado. No hay otra, no es la descripción, ni la fecha de contrato. Es un número, pues el importe.

Cuanta información en una sola línea, solamente por haber puesto un prefijo a las variables!!!

En el día a día, ventaja adicional, no te vas a ver inducido a teclear iContrato:=sContrato directamente sabes que eso no puede ser, no coinciden los tipos. De nuevo, sin ver nada más, sabes que esa línea está mal.

Más efectos colaterales: Unificación de criterios en el equipo. Varios programadores, y comienza la fiesta:

  • FechaContrato
  • FContrato
  • Fecha_de_contrato

Cada uno nombrando las variables según se le va ocurriendo. Con la notación húngara directamente dContrato, no tendrá sentido nombrar dFechaContrato, tenemos un criterio que va a unificar el código entre todos los programadores del proyecto (o al menos lo va a intentar).

Vamos a seguir, modificamos la línea de código anterior:

         oContrato.Procesar(iContrato, sContrato, dContrato, nContrato, btnAceptar)

Pum! efectivamente, estamos pasando un botón, y será el que sea llamado (a su onclick por ejemplo) cuando el método termine (es un ejemplo, es un ejemplo). De nuevo sin ver la declaración, sabemos qué está ocurriendo.

De hecho el propio Delphi en varias partes de la VCL hace esto mismo, los T* de las clases, los var* de algunos tipos, etc. (aunque no es exactamente así al 100%; puedes revisar la Object Pascal Style Guide )

Nota “seria”: La notación húngara fue creada por el Dr. Charles Simonyi, aunque esto lo puedes ver en Notación húngara - Wikipedia, la enciclopedia libre

No existe una lista de prefijos predeterminados (las hay, pero no es un estandar), puedes inventarte la tuya; yo más o menos utilizo:

  • i integers
  • n números (double, float, extended, lo que vienen a ser ‘importes’)
  • d fechas
  • c caracteres
  • s strings
  • w word (el de Office no, el tipo Word)
  • btn botones
  • lv listview
  • lb checkbox
  • rb radio button
  • gp group box
  • Gb si una variable es global (si ya, hemos matado un gatito por tener variables globales, qué se le va a hacer), además del prefijo normal, le pongo un Gb.
  • cmb combobox
  • grd grids
  • ds datasource
  • tb TTable
  • q TQuery

etc…. como digo, crea tu propio criterio.

Finalmente, comentar que a poco que busques te vas a encontrar bastantes detractores de la notación húngara. Bueno, ahí está el debate; a mí en particular me ofrece muchas más ventajas que desventajas; que realmente desventaja es que todavía no le he encontrado ninguna. Quizás la desventaja que más pesa es ¿qué ocurre si cambio el tipo de una variable? tendría que renombrar la variable en todo el código! pues sí, cierto; pero hoy en dia con las herramientas de refactorización y la potencia de los editores de código:

  • ese trabajo de renombrar variables ya no es un problema.
  • incluso al refactorizar, te va a mostrar previamente los cambios a realizar, con lo cual ‘podrás echar un vistazo’ a lo que va a suponer el cambio de tipo de tu variable.

Pues ya está, esta ha sido mi pequeña revisión de la notación húngara (en mi caso utilizada en Delphi)

Avatar
Diego J. Muñoz
Programador Freelance

Desarrollo de aplicaciones a medida. Experiencia.

Siguiente
Anterior