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".
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 );
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.
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 tipo FILE *
, en su lugar.while(<file_handle>)
$_
defined()
"0"
while()
while()
CALL
declaració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.@%
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]typeof
operador tiene éxito cuando el operando es un identificador no declarado, lo que normalmente daría como resultado un ReferenceError
.stdio.h
0-201-54433-4No es seguro copiar estos objetos dentro del programa; a veces sus direcciones pueden ser "mágicas".