En el artículo de Eric Lippert ¿Qué pasa con la notación húngara? , afirma que el propósito de la notación húngara (el buen tipo) es
ampliar el concepto de "tipo" para abarcar información semántica además de información de representación de almacenamiento.
Un ejemplo simple sería prefijar una variable que representa una coordenada X con "x" y una variable que representa una coordenada Y con "y", independientemente de si esas variables son números enteros o flotantes o lo que sea, de modo que cuando escriba accidentalmente xFoo + yBar
, el código claramente se ve mal.
Pero también he estado leyendo sobre el sistema de tipos de Haskell, y parece que en Haskell, uno puede lograr lo mismo (es decir, "ampliar el concepto de tipo para abarcar la información semántica") utilizando tipos reales que el compilador verificará por usted. Entonces, en el ejemplo anterior, xFoo + yBar
en Haskell en realidad no se compilaría si diseñara su programa correctamente, ya que se declararían como tipos incompatibles. En otras palabras, parece que el sistema de tipos de Haskell admite efectivamente la verificación en tiempo de compilación equivalente a la notación húngara
Entonces, ¿la notación húngara es solo una curita para los lenguajes de programación cuyos sistemas de tipos no pueden codificar información semántica? ¿O la notación húngara ofrece algo más allá de lo que puede ofrecer un sistema de tipo estático como el de Haskell?
(Por supuesto, estoy usando Haskell como ejemplo. Estoy seguro de que hay otros lenguajes con sistemas de tipo similarmente expresivos (¿ricos? ¿Fuertes?), Aunque no he encontrado ninguno).
Para que quede claro, estoy no hablando de anotar los nombres de variables con la información de tipo, sino más bien con la información sobre el significado de la variable en el contexto del programa. Por ejemplo, una variable puede ser un número entero o flotante o doble o largo o lo que sea, pero tal vez el significado de la variable es que es una coordenada x relativa medida en pulgadas. Este es el tipo de información sobre la que estoy hablando de codificación a través de la notación húngara (y los tipos de Haskell).