stringtranslate.com

tarea aumentada

Asignación aumentada (o asignación compuesta ) es el nombre que reciben ciertos operadores de asignación en determinados lenguajes de programación (especialmente los derivados de C ). Una asignación aumentada generalmente se usa para reemplazar una declaración en la que un operador toma una variable como uno de sus argumentos y luego asigna el resultado nuevamente a la misma variable. Un ejemplo sencillo es el que se expande a . A menudo se encuentran disponibles construcciones similares para varios operadores binarios.x += 1x = x + 1

En general, en los lenguajes que ofrecen esta característica, 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, bitshift. 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 "buscar el número almacenado en la variable x , agregarle 1 y almacenar el resultado de la suma en la variable x ". Por simple que parezca, 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 podría ser una referencia a algún elemento de la matriz o otra complejidad. En comparación, aquí está la versión de tarea aumentada:

x += 1

Con esta versión, no hay excusa para que un compilador no pueda generar código que busque la ubicación de la variable x solo una vez y la modifique en su lugar, si, por supuesto, el código de 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 así como

Cargar x Añadir 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

DM x,1

que significa "Modificar memoria" agregando 1 a x, y un compilador optimizador generaría el mismo código para ambas formas. Algunos códigos de máquina ofrecen operaciones INC y DEC (para sumar o restar una), otros pueden permitir constantes distintas a una.

De manera más general, la forma es

X ? = expresión

donde el ? representa algún operador (no siempre + ) y es posible que no haya códigos de operación especiales que ayuden. Todavía existe la posibilidad de que si x es una entidad complicada, se aliente al compilador a evitar la duplicación al acceder a 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 , usando el símbolo de tilde para representar la variable a la que se asigna, de modo que

Nombre largo:=x + sqrt(Nombre largo)*7;

se convertiría

Nombre largo:=x + sqrt(~)*7;

Etcétera. Esto es más general que simplemente x:=~ + 1;producir código óptimo seguiría siendo competencia del compilador.

Semántica

En 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, peor aún, un error tipográfico puede producir fácilmente una secuencia diferente de galimatías que, aunque aceptada por el compilador, no produce 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 derecha .

A diferencia de C, las expresiones de asignación compuesta de C++ se evalúan como un valor l . [1] Ser un valor l permite escribirlo en el lado izquierdo de alguna otra declaración de asignación: [2]

int x = 11 ; ( x *= 2 ) += 3 ; // Establece x en 25        

Ubicaciones de asignaciones calculadas

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 solo una vez. Es decir, en la declaración:

mi_matriz [ f1 ()] += 1  

La función f1debe llamarse solo una vez.

Si un lenguaje implementa una asignación aumentada mediante expansión de macros para:

mi_matriz [ f1 ()] = mi_matriz [ f1 ()] + 1    

Luego f1lo llaman dos veces.

Por idioma

C descendientes

En C , C++ y C# , el operador de asignación es =, que se aumenta de la siguiente manera:

Cada uno de estos se denomina operador de asignación compuesta en dichos idiomas. [1] [3] [4] [5]

Idiomas de soporte

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

Referencias

  1. ^ ab "Operadores de asignación". cppreference.com . Referencia de C++ . Consultado el 1 de marzo de 2021 .
  2. ^ Stroustrup, Bjarne (2013). El lenguaje de programación C ++ (Cuarta ed.). Addison-Wesley. ISBN 978-0-321-56384-2.
  3. ^ "Borrador del Comité ISO/IEC 9899:201x 12 de abril de 2011 N1570".
  4. ^ "Operadores de asignación y asignación compuesta".
  5. ^ "Especificación del lenguaje C#". Microsoft . Consultado el 17 de marzo de 2014 .