Comencemos con el operador más simple, el signo más (+). El signo más (+) es un operador binario, es decir, el signo más solo conecta dos números, nunca el tercero o más números conectados.
Por lo tanto, "1 más 2 más 3" se expresa en la computadora como:
(1 + 2) + 3 // aor
1 + (2 + 3) // bAunque normalmente lo escribimos como 1 + 2 + 3, eso no significa que sea equivalente a 1+2+3 en nuestras matemáticas.
Entonces, ¿1+2+3 en matemáticas representa a o b?
Si la evaluación de la computadora es asociativa por la izquierda, entonces esta expresión es equivalente al primer tipo a; si es asociativa por la derecha, entonces esta expresión es equivalente al segundo tipo b;
La comprensión simple de 1 + 2 + 3 es "sumar 1, 2 y 3". De hecho, en las matemáticas a las que estamos expuestos, es sumar tres números. Pero en los lenguajes de programación, no es sólo eso.
Como se mencionó anteriormente, el signo + no puede operar con tres o más números, y solo puede participar en operaciones de suma con dos números.
Por cierto, más y menos son operadores unarios. Aunque usan los mismos símbolos que los operadores binarios de suma y resta, son diferentes, así que no des por sentado que +4 equivale a 0+4. no son equivalentes,
+4 es un número entero, pero 0+4 es una expresión de suma, que se evalúa exactamente como +4.
En java, podemos escribir short a = +4, pero cuando escribimos short a = 0 + 4 se genera una advertencia.
Hay otro ejemplo, también sobre breves,
corto b = 1;
corto b = b + 4 // advertencia
short b += 4; // Sin advertencia. Entonces, ¿cómo funciona 1 + 2 + 3? En el lenguaje de programación de la arquitectura von Neumann, hay un efecto secundario: estoy acostumbrado a llamarlo "cuando el proceso informático de una computadora es diferente del proceso de pensamiento del cerebro del programador, se llama efecto secundario" (aunque no está escrito así en el libro) Sí, pero siempre lo he pensado), originalmente pensaste que sería así, pero resulta que la computadora no hace esto, lo llamo un efecto secundario.
Si ha leído las "Declaraciones y Expresiones" anteriores, esto se puede entender así:
1 + 2 es una expresión cuyo valor de retorno es 3. Luego, el valor de retorno de esta expresión se suma a otra expresión 3 + 3, y el resultado final es 6.
Reescribimos este código usando Declaración:
// Calcula 1 + 2 + 3
var a = 1 + 2;
var b = a + 3;Si evaluamos esta expresión en lisp, no hay efectos secundarios.
(+ (+ 1 2) 3) Si aún no lo entiendes, o este ejemplo es demasiado especial, cambiémoslo por otro.
5 > 4 > 3 En matemáticas, esta ecuación se evalúa como verdadera. Cuando escribimos este código en lenguaje C, de hecho devuelve falso.
La razón es la misma que la anterior: el signo mayor que (>) es una operación binaria que no puede comparar directamente tres números. El resultado devuelto por 5> 4 es verdadero. Cuando se compara verdadero con 3, verdadero se convierte en 1. que es 1 > 3, el resultado final es naturalmente falso.
En definitiva, volvemos al punto de vista del artículo "Declaraciones y Expresiones": cada expresión en un lenguaje de programación tiene un valor.
Aunque los operadores en lenguajes de programación son los mismos que los operadores en matemáticas, no son equivalentes. Cuando escriba un programa, escríbalo para que la gente lo lea; cuando depure un programa, debe aprender a pensar en el significado del código en forma informática.
Estoy acostumbrado a entender los operadores como funciones. Por ejemplo, 2 + 5 es en realidad agregar (2, 5) o 2.add (5). ¿Les voy a decir en secreto: "De hecho, muchos idiomas hacen esto".