perl - ejemplos - notacion hungara pdf
¿La notación húngara es aplicable a Perl? (5)
Meh. Arrayrefs, hashrefs y cosas por el estilo no terminan siendo tan confusas aquí que el problema surge para nuestros tipos de datos Perl muy a menudo. (También: $oValue
? ¿Qué tan genérico puede ser? ¿Qué tipo de objeto es?)
Dame la unidad de unidades semánticas de notación húngara en su lugar: $size_bits
, $size_bytes
, $size_kb
, $size_blocks
, $size_mb
, $size_gb
. El tipo de datos subyacente? No es tan importante como agregar 3 bytes a 10 megabytes por segundo y obtener 13. Aquí es donde la notación húngara de alguna forma es útil.
En Perl, la referencia a cualquier cosa es un simple escalar, y tiene el $
sigil. A veces es difícil decir qué tipo de referencia es.
Yo personalmente prefijo los nombres de las variables para las referencias con una letra, que indica el tipo de ref. Ejemplos:
my $aValues = []; # arrayref
my $hValue = {}; # hashref
my $oValue = bless {}; # object
my $sValue = /(my $s = ''foo''); # scalarref
...
He visto tanto partidarios como oponentes a tal notación. ¿Lo usas? ¿Tiene alguna desventaja?
No hago esto porque el uso de una referencia dejará en claro su cosita. Por ejemplo:
$a->{key}; # hash
... if @$b; # array
$c->foo; # object
Elegir nombres para sus variables que comuniquen lo que representan les servirá de mucho. Perl fue diseñado por un lingüista y toma prestado del lenguaje natural, por lo que el contexto es clave. Nuestros cerebros ya están cableados para este tipo de procesamiento. ¡Haz uso de cómo estructura tu código!
Personalmente encuentro que la notación húngara es difícil de leer. Solo uso las convenciones en inglés:
my $values; # is an array
my $value; # is a scalar
my $value_hash; # is a hash
Usualmente trato los objetos de la misma manera que los escalares porque su uso lo hace lo suficientemente obvio como para ser un objeto. Sin embargo, si alguna vez encuentro la necesidad de usar,
my $value_obj; # is an object
Si quieres lenguajes estáticos, sabes dónde encontrarlos ...
Pero la notación húngara nunca tuvo la intención de ser sobre tipos de datos técnicos (aunque se ha ganado la mayor parte de su mala reputación siendo incomprendido y aplicado para tipos de datos técnicos). El húngaro que originalmente lo inventó (Charles Simonyi) pretendía transmitir información semántica , por ejemplo, usando prefijos de filas y columnas en el código que trata con las tablas para que no se mezclen los índices de filas y columnas.
El propósito de la notación húngara es incrustar anotaciones semánticas que
- no se puede expresar de otra manera dentro del lenguaje, especialmente el sistema de tipo Y
- no son evidentes desde el contexto
en los nombres de las variables Ahora, dado que Perl no tiene un sistema de tipo estático, podría parecer que la notación húngara debería ser bastante común. Pero, tome el ejemplo canónico del valor de la notación húngara: rastreando el origen de los datos que no son de confianza.
Uno de los ejemplos más citados para la notación húngara es el prefijo de todas las variables de cadena en una aplicación con s
o u
( seguro e inseguro ), dependiendo de si la cadena proviene de una fuente confiable (o ha sido desinfectada) o no confiable uno. Pero: simplemente reemplaza inseguro con contaminado y tienes una descripción perfecta de la contaminación en Perl. Entonces, en este caso, aunque Perl no tiene un sistema de tipo estático, tiene un sistema de tipo dinámico que le permite expresar la semántica de confianza / no confianza dentro del lenguaje y, por lo tanto, la notación húngara es superflua. (E incluso en un lenguaje sin soporte incorporado para la contaminación, generalmente hay formas mucho mejores, como subtipificación (Python, Ruby, Smalltalk, ...), anotaciones / atributos (Java, C #, ...), metadatos (Clojure, ...) y tipificación estática (Haskell, ML, ...).
Además, Perl es bastante expresivo, y por lo tanto es mucho más fácil mantener todo el contexto para una variable en tu cabeza (o dentro de una pantalla llena de código), así que, a menudo, la semántica es evidente desde el código circundante.
Un buen nombre también ayuda, por supuesto.
Recuerda: la notación húngara fue inventada para C, que no es expresiva y tiene un sistema de tipo estático cuyo uso más o menos único es el punchline de una broma.