Vamos começar com o operador mais simples, o sinal de mais (+). O sinal de mais (+) é um operador binário - ou seja, o sinal de mais conecta apenas dois números, nunca o terceiro ou mais números conectados.
Portanto, “1 mais 2 mais 3” é expresso no computador como:
(1 + 2) + 3 // aoou
1 + (2 + 3) // bEmbora normalmente o escrevamos como 1 + 2 + 3, isso não significa que seja equivalente a 1+2+3 na nossa matemática.
Então, 1+2+3 em matemática representa a ou b?
Se a avaliação do computador for associativa à esquerda, então esta expressão é equivalente ao primeiro tipo a; se for associativa à direita, então esta expressão é equivalente ao segundo tipo b;
A compreensão simples de 1 + 2 + 3 é “somar 1, 2 e 3”. Na verdade, na matemática a que estamos expostos, é somar três números. Mas nas linguagens de programação, não é só isso.
Conforme mencionado anteriormente, o sinal + não pode operar com três ou mais números, podendo apenas participar de operações de adição com dois números.
A propósito, mais e menos são operadores unários. Embora usem os mesmos símbolos que os operadores binários de adição e subtração, eles são diferentes, portanto, não tome como certo que +4 é equivalente a 0+4, na verdade. eles não são equivalentes,
+4 é um número inteiro, mas 0+4 é uma expressão de adição, que resulta exatamente em +4.
Em java, podemos escrever a = +4 curto, mas quando escrevemos a = 0 + 4 curto, um aviso é gerado.
Há outro exemplo, também de curta duração,
curto b = 1;
curto b = b + 4;
short b += 4; // Sem aviso. Na linguagem de programação da arquitetura von Neumann, há um efeito colateral - costumo chamá-los de "quando o processo de computação do computador é diferente do processo de pensamento do cérebro do programador, isso é chamado de efeito colateral" (embora seja não está escrito assim no livro) Sim, mas sempre pensei assim), originalmente você pensou que seria assim, mas acontece que o computador não faz isso, chamo isso de efeito colateral.
Se você leu as “Declarações e Expressões” anteriores, isso pode ser entendido assim:
1 + 2 é uma expressão cujo valor de retorno é 3. O valor de retorno desta expressão é então adicionado a outra expressão 3 + 3, e o resultado final é 6.
Reescrevemos este código usando a instrução:
// Calcula 1 + 2 + 3
var a = 1 + 2;
var b = a + 3; Se avaliarmos esta expressão em lisp, não haverá efeitos colaterais.
(+ (+ 1 2) 3) Se você ainda não entendeu, ou este exemplo é muito especial, vamos trocá-lo por outro.
5 > 4 > 3 Em matemática, esta equação é avaliada como verdadeira. Quando escrevemos este código em linguagem C, ele realmente retorna falso.
O motivo é o mesmo acima. O sinal de maior que (>) é uma operação binária. Não é possível comparar diretamente três números. O resultado retornado por 5 > 4 é verdadeiro. que é 1 > 3, o resultado final é naturalmente falso.
Resumindo, voltamos ao ponto de vista do artigo “Declarações e Expressões”: toda expressão em uma linguagem de programação possui um valor.
Embora os operadores em linguagens de programação sejam iguais aos operadores em matemática, eles não são equivalentes. Quando você escreve um programa, escreva-o para as pessoas lerem; quando você depura um programa, você deve aprender a pensar sobre o significado do código de uma forma computacional.
Estou acostumado a entender os operadores como funções. Por exemplo, 2 + 5 é na verdade add(2, 5) ou 2.add(5). Vou lhe dizer secretamente: “Na verdade, muitas línguas fazem isso”.