¿Qué es la asociatividad (para un operador) y por qué es importante?
Actualizado: asociatividad del operador
¿Qué es la asociatividad (para un operador) y por qué es importante?
Actualizado: asociatividad del operador
Respuestas:
Para los operadores, asociatividad significa que cuando el mismo operador aparece en una fila, entonces qué ocurrencia de operador aplicamos primero. En lo siguiente, Q
sea el operador
a Q b Q c
Si Q
es asociativo a la izquierda, se evalúa como
(a Q b) Q c
Y si es asociativo correcto, se evalúa como
a Q (b Q c)
Es importante, ya que cambia el significado de una expresión. Considere el operador de división con aritmética de enteros, que es asociativo a la izquierda
4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0
Si fuera asociativo a la derecha, se evaluaría como una expresión indefinida, ya que dividiría por cero
4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined
expr -> expr + term;
es asociativo por la izquierda y expr -> term + expr
es asociativo por la derecha.
a * b / c
evaluaría si *
sería asociativo por la izquierda pero /
sería asociativo por la derecha? Entonces hay una contradicción. Por tanto, creo que hay que decir "cuando los operadores tienen la misma precedencia y asociatividad" si quieres cubrir varios operadores.
Hay tres tipos de asociatividad:
La propiedad asociativa en matemáticas
Orden de operaciones en lenguajes de programación
Asociatividad en cachés de CPU.
La propiedad asociativa en matemáticas es una propiedad de los operadores como la suma (+). Esta propiedad le permite reorganizar los paréntesis sin cambiar el valor de una declaración, es decir:
(a + b) + c = a + (b + c)
En los lenguajes de programación, la asociatividad (o fijeza) de un operador es una propiedad que determina cómo se agrupan los operadores de la misma precedencia en ausencia de paréntesis; es decir, en qué orden se evalúa cada operador. Esto puede diferir entre los lenguajes de programación.
En las memorias caché de la CPU, la asociatividad es un método para optimizar el rendimiento.
¡¡Sencillo!!
Left Associative means we evaluate our expression from left to right
Right Associative means we evaluate our expression from right to left
Sabemos que *, / y% tienen la misma precedencia, pero según la asociatividad, la respuesta puede cambiar:
Por ejemplo: tenemos la expresión: 4 * 8/2% 5
Left associative: (4 * 8) / 2 % 5 ==> (32 / 2) % 5 ==> 16 % 5 ==> 1
Right associative: 4 * 8 /(2 % 5) ==> 4 * ( 8 / 2) ==> 4 * 4 ==> 16
2 % 5
evalúa 2
, no 0
.
Si se refiere a "asociatividad de operadores", es la forma en que un lenguaje determina cómo se agrupan los operadores de la misma precedencia en ausencia de paréntesis.
Por ejemplo, los operadores + y - en lenguajes basados en C tienen la misma precedencia. Cuando escribe una expresión que usa ambos (sin paréntesis), el compilador debe determinar en qué orden evaluarlos.
Si escribe 12 - 5 + 3, las posibles evaluaciones incluyen:
Dependiendo del orden en el que evalúe la expresión, puede obtener diferentes resultados. En los lenguajes basados en C, + y - tienen asociatividad izquierda, lo que significa que la expresión anterior se evaluaría como el primer caso.
Todos los lenguajes tienen reglas fuertemente definidas tanto para la precedencia como para la asociatividad. Puede obtener más información sobre las reglas de C # aquí. Los conceptos generales de asociatividad y precedencia de operadores están bien cubiertos en wikipedia.
es el orden de evaluación de los operadores de la misma precedencia. El orden de IZQUIERDA A DERECHA o DERECHA A IZQUIERDA importa. por
3 - 2 - 1
si es de IZQUIERDA a DERECHA, entonces es
(3 - 2) - 1
y es 0. Si es de DERECHA a IZQUIERDA, entonces es
3 - (2 - 1)
y es 2. En la mayoría de los lenguajes, decimos que el operador menos tiene una asociatividad de IZQUIERDA A DERECHA.
La situación 3 - 2 - 1
puede parecer trivial, si la afirmación es, "por supuesto que lo hacemos de izquierda a derecha". Pero en otros casos, como si se hiciera en Ruby o en NodeJS:
$ irb
2.6.3 :001 > 2 ** 3 ** 2
=> 512
El **
operador está "al poder de". La asociatividad es de derecha a izquierda. Y es
2 ** (3 ** 2)
que es 2 ** 9
, es decir 512
, en lugar de
(2 ** 3) ** 2
que es 8 ** 2
, es decir, 64
.
Supongo que te refieres a la asociatividad del operador ...
Es el orden de vinculación de operandos a un operador. Básicamente:
a - b + c
podría evaluarse como (asumiendo que - y + tienen la misma precedencia):
((a - b) + c) o,
(a - (b + c))
Si los operadores son asociativos a la izquierda (se unen inmediatamente al operando izquierdo), se evaluará como el primero. Si son asociativos a la derecha, se evaluará como el segundo.
Si te refieres a la asociatividad del operador:
Define la forma en que se analizan las expresiones. Proporciona un estándar, por lo que cada expresión se analiza de la misma manera.
Es sobre todo importante para las operaciones que tienen el mismo precedente, cuando podría haber efectos secundarios.
La mayoría de los ejemplos anteriores han utilizado constantes. Si los argumentos resultan ser llamadas a funciones, el orden en el que se realizan las llamadas puede estar determinado por las reglas de asociación, dependiendo, por supuesto, de su compilador. Y si esas funciones tienen efectos secundarios ...
Todos sabemos que la precedencia es importante, pero también lo es la asociatividad al interpretar el significado de una expresión. Para una introducción realmente simple, pruebe Power of Operators .
La asociatividad viene bajo el orden de computación en los conceptos del lenguaje de programación. El orden de cálculo determina el significado de la expresión. Tiene dos reglas principales,
- Reglas de precedencia
- Reglas de asociatividad
Las reglas de precedencia definen el orden en el que se evalúan los operadores "adyacentes" de diferentes tipos. Cada lenguaje de programación tiene su propia tabla de precedencia de operadores con respecto a sus operadores.
Volviendo a la asociatividad,
Define el orden de ejecución de operaciones adyacentes con la misma precedencia. Tiene 3 sabores,
asociatividad izquierda asociatividad
derecha
no asociatividad
Si un operador es asociativo a la izquierda, se evalúa de izquierda a derecha de la misma forma que si es asociativo a la derecha, se evalúa de derecha a izquierda.