La asignación aumentada (o asignación compuesta ) es el nombre que se le da a ciertos operadores de asignación en ciertos lenguajes de programación (especialmente los derivados de C ). Una asignación aumentada se usa generalmente para reemplazar una declaración donde un operador toma una variable como uno de sus argumentos y luego asigna el resultado a la misma variable. Un ejemplo simple es el que se expande a . A menudo se encuentran disponibles construcciones similares para varios operadores binarios.x += 1
x = x + (1)
En general, en los lenguajes que ofrecen esta función, la mayoría de los operadores que pueden tomar una variable como uno de sus argumentos y devolver un resultado del mismo tipo tienen una asignación aumentada equivalente que asigna el resultado a la variable en su lugar, incluidos los operadores aritméticos, desplazamiento de bits operadores y operadores bit a bit .
Discusión
Por ejemplo, la siguiente declaración o alguna variación de ella se puede encontrar en muchos programas:
x = x + 1
Esto significa "encontrar el número almacenado en la variable x , agregarle 1 y almacenar el resultado de la suma en la variable x . "Tan simple como parece, puede tener una ineficiencia, ya que la ubicación de la variable x debe buscarse dos veces si el compilador no reconoce que dos partes de la expresión son idénticas: x puede ser una referencia a algún elemento de la matriz u otra complejidad. En comparación, aquí está la versión de asignación aumentada:
x + = 1
Con esta versión, no hay excusa para que un compilador no genere código que busque la ubicación de la variable x solo una vez, y lo modifica en su lugar, si, por supuesto, el código de la máquina admite dicha secuencia. Por ejemplo, si x es una variable simple, la secuencia del código de máquina podría ser algo como
Carga x Agregar 1 Tienda x
y se generaría el mismo código para ambos formularios. Pero si hay un código de operación especial, podría ser
MDM x, 1
que significa "Modificar memoria" agregando 1 ax, y un compilador decente generaría el mismo código para ambas formas. Algunos códigos de máquina ofrecen operaciones INC y DEC (para sumar o restar uno), otros pueden permitir constantes distintas de una.
De manera más general, la forma es
x ? = expresión
donde el ? significa algún operador (no siempre + ), y es posible que no haya códigos de operación especiales para ayudar. Todavía existe la posibilidad de que si x es una entidad complicada, el compilador se animará a evitar la duplicación en el acceso x , y por supuesto, si x es un nombre largo, será necesario escribir menos. Esta última fue la base de una característica similar en los compiladores ALGOL ofrecidos a través de los sistemas Burroughs B6700 , utilizando el símbolo de tilde para representar la variable a la que se asigna, de modo que
LongName: = x + sqrt (LongName) * 7;
se convertiría
Nombre largo: = x + sqrt (~) * 7;
Etcétera. Esto es más general que simplemente x:=~ + 1;
Producir un código óptimo seguiría siendo competencia del compilador.
Semántica
En los lenguajes de programación orientados a expresiones como C, la asignación y la asignación aumentada son expresiones que tienen un valor. Esto permite su uso en expresiones complejas. Sin embargo, esto puede producir secuencias de símbolos que son difíciles de leer o comprender y, lo que es peor, un error de escritura puede producir fácilmente una secuencia diferente de galimatías que, aunque aceptadas por el compilador, no producen los resultados deseados. En otros lenguajes, como Python, la asignación y la asignación aumentada son declaraciones, no expresiones y, por lo tanto, no se pueden usar en expresiones complejas. Por ejemplo, lo siguiente es C válido, pero no Python válido:
a + = b + = c
Al igual que con la asignación, en estos idiomas, la asignación aumentada es una forma de asignación asociativa por la derecha .
Ubicaciones de asignaciones computadas
En lenguajes como C, C ++ y Python, una asignación aumentada donde la ubicación de la asignación incluye llamadas a funciones tiene el mandato de llamar a las funciones una sola vez. Es decir, en el comunicado:
my_array [ f1 ()] + = 1
La función f1
está obligada a llamarse solo una vez.
Si un lenguaje implementa una asignación aumentada por expansión de macro a:
my_array [ f1 ()] = my_array [ f1 ()] + 1
Entonces f1
se llama dos veces.
Por idioma
Descendientes de C
En C , C ++ y C # , el operador de asignación es = , que se aumenta de la siguiente manera:
Operador | Descripción |
---|---|
+= | Adición |
-= | Sustracción |
*= | Multiplicación |
/= | División |
%= | Módulo |
<<= | Desplazamiento de bit a la izquierda |
>>= | Desplazamiento de bit a la derecha |
&= | Y bit a bit |
^= | OR exclusivo bit a bit |
|= | OR inclusivo bit a bit |
Cada uno de estos se denomina operador de asignación compuesta en dichos idiomas. [1] [2] [3]
Idiomas de apoyo
La siguiente lista, aunque no es completa ni exhaustiva, enumera algunos de los principales lenguajes de programación que admiten operadores de asignación aumentada.
|
|
|
Ver también
- Operadores de incremento y decremento : caso especial de asignación aumentada, en 1
- Operación aritmética aumentada IEEE 754
Referencias
- ^ "ISO / IEC 9899: 201x Comité borrador 12 de abril de 2011 N1570" .
- ^ "Operadores de asignación y asignación compuesta" .
- ^ "Especificación del lenguaje C #" . Microsoft . Consultado el 17 de marzo de 2014 .