En el contexto de la programación informática, magia es un término informal para la abstracción ; se utiliza para describir el código que maneja tareas complejas mientras oculta esa complejidad para presentar una interfaz simple. El término es un tanto irónico y a menudo conlleva malas connotaciones, ya que implica que el verdadero comportamiento del código no es inmediatamente evidente. Por ejemplo, los mecanismos de tipado y cierre polimórficos de Perl a menudo se denominan "mágicos".
El término implica que la complejidad oculta es al menos en principio comprensible, en contraste con las variantes que describen técnicas arcanas que están deliberadamente ocultas o son extremadamente difíciles de entender. Sin embargo, el término también puede aplicarse de manera cariñosa, sugiriendo un "encanto" en el código.
La acción de tales abstracciones se describe como realizada " automágicamente ", un compuesto de "automáticamente" y "mágicamente".
Opacidad referencial
El término "magia" hace referencia a procedimientos que realizan cálculos basados en datos que no se les proporcionan claramente, accediendo a otros módulos, posiciones de memoria o variables globales a las que no deberían acceder (en otras palabras, no son referencialmente transparentes). Según los modelos de arquitectura de software más recientes , incluso cuando se utiliza programación estructurada , se suele preferir que cada función se comporte de la misma manera cada vez que se le pasan los mismos argumentos, siguiendo así uno de los principios básicos de la programación funcional . Cuando una función rompe esta regla, a menudo se dice que contiene "magia".
Un ejemplo simplificado de magia negativa es el siguiente código en PHP :
función mágica ()
{
global $algunavariable ;
echo $algunavariable ;
}
$algunavariable = verdadero ;
magia ();
Si bien el código anterior es claro, si se lo ve en un proyecto grande, suele ser difícil comprender magic()de dónde obtiene el valor la función. Es preferible escribir ese código utilizando el siguiente concepto:
función noMagic ( $myvariable )
{
echo $myvariable ;
}
$algunavariable = verdadero ;
noMagic ( $algunavariable );
No ortogonalidad
Cualquier SV [valor escalar] puede ser mágico, es decir, tiene características especiales que un SV normal no tiene.
— Larry Wall , página del manual de perlguts , [1] Perl 5
Esta definición de magia o mágico se puede extender a un tipo de datos , fragmento de código, palabra clave o dirección de máquina que tiene propiedades que no comparten otros objetos idénticos. Las propiedades mágicas pueden estar documentadas o no.
- En ISO C , los identificadores de archivos (de tipo
FILE) no se pueden copiar de forma segura, ya que sus direcciones [2] pueden ser mágicas. Es decir, el entorno de ejecución puede colocar los identificadores de archivos originales en un rango de direcciones codificado de forma rígida y no proporcionar el comportamiento del identificador de archivo a una copia creada por el usuario en otra dirección. En consecuencia, las rutinas de la biblioteca estándar aceptan punteros a identificadores de archivos, de tipoFILE *, en su lugar. - En Perl 5, la declaración asigna implícitamente la línea leída del archivo por <file_handle> a la variable y aplica la función a la expresión de modo que cualquier cadena leída con éxito, incluso la cadena vacía , se evalúa como verdadera y continúa el bucle. Esto no le sucede a <file_handle> en ningún otro lugar, ni a ninguna otra expresión de control. [3]
while(<file_handle>)$_defined()"0"while()while() - En un emulador , especialmente uno en desarrollo, los puntos de llamada del sistema de la máquina emulada pueden ser mágicos; cuando se los llama, el emulador puede ejecutar código nativo por conveniencia, velocidad o acceso al hardware físico y configurar la CPU y la memoria emuladas como si hubiera ejecutado el código original.
- Por ejemplo, la
CALLdeclaración de BBC BASIC V trata las direcciones de llamadas del sistema de Acorn MOS mágicamente; en lugar de intentar ramificarse al código ARM en esas direcciones, genera una interrupción de software en RISC OS equivalente a la llamada del sistema. [4] [ fuente no primaria necesaria ] El efecto es emular Acorn MOS lo suficiente para que los programas BASIC de 8 bits que no contienen lenguaje ensamblador se ejecuten sin modificaciones.
- Por ejemplo, la
- Además, en BBC BASIC, la variable numérica no sólo
@%controla el formato de impresión, sino que también acepta la asignación directa de cadenas de formato ANSI printf , normalmente un error de falta de coincidencia de tipos. [4] - En JavaScript , la evaluación del
typeofoperador tiene éxito cuando el operando es un identificador no declarado, lo que normalmente daría como resultado unReferenceError. - Cualquier comentario que tenga efecto en el código es mágico.
- Las direcciones de E/S mapeadas en memoria y las variables volátiles también son mágicas en este sentido, aunque el término normalmente no se aplica.
Véase también
Referencias
- ^ "perlguts – perldoc.perl.org". 5 de octubre de 2014. Consultado el 18 de febrero de 2015 .
- ^ Banahan, Mike; Brady, Declan; Doran, Mark (1991). "9.10.3 El archivo de encabezado". El libro de C: Presentación del estándar ANSI C. El conjunto de instrucciones (2.ª ed.). Wokingham, Inglaterra: Addison-Wesley Publishers. pág. 234. ISBN
stdio.h0-201-54433-4No es seguro copiar estos objetos dentro del programa; a veces sus direcciones pueden ser "mágicas"
. - ^ "perlop – perldoc.perl.org". 7 de septiembre de 2010. Consultado el 17 de febrero de 2011 .
- ^ ab "27. Palabras clave" (PDF) . Manual de referencia de BBC BASIC (1.ª ed.). Cambridge, Inglaterra: Acorn Computers. Octubre de 1992. pp. 229, 349. ISBN 1-85250-103-0. Consultado el 9 de mayo de 2007 .[ enlace muerto ]