1.1.1 Expressões
Uma maneira fácil de começar a programar é examinar algumas interações típicas com um interpretador da linguagem JavaScript. Você digita uma instrução e o interpretador responde exibindo o resultado da avaliação dessa instrução.
Nesta edição, você pode executar o código JavaScript diretamente na página: cada exemplo aparece em um editor interativo e é avaliado ao pressionar o botão "Executar". O código também é editável — experimente modificá-lo e executar de novo!
Um tipo de instrução que você pode digitar é uma instrução de expressão, que consiste em uma expressão seguida por um ponto e vírgula. Um tipo de expressão primitiva é um número. (Mais precisamente, a expressão que você digita consiste nos numerais que representam o número na base 10.) Se você pedir ao interpretador para avaliar a instrução de expressão
ele responderá exibindo o valor resultante. Pressione "Executar" na instrução de expressão primitiva acima e veja o que acontece!
Expressões que representam números podem ser combinadas com operadores (como + ou *) para formar uma expressão composta que representa a aplicação de uma função primitiva correspondente a esses números. Por exemplo, avalie qualquer uma das seguintes instruções de expressão:
Expressões como essas, que contêm outras expressões como componentes, são chamadas de combinações. As combinações formadas por um símbolo de operador no meio e expressões de operando à esquerda e à direita dele são chamadas de combinações de operadores. O valor de uma combinação de operadores é obtido aplicando a função especificada pelo operador aos argumentos que são os valores dos operandos.
A convenção de colocar o operador entre os operandos é conhecida como notação infixa. Ela segue a notação matemática com a qual você provavelmente está familiarizado na escola e na vida cotidiana. Como na matemática, as combinações de operadores podem ser aninhadas, ou seja, podem ter operandos que são combinações de operadores:
Como de costume, os parênteses são usados para agrupar combinações de operadores a fim de evitar ambiguidades. JavaScript também segue as convenções usuais quando os parênteses são omitidos: multiplicação e divisão se ligam mais fortemente do que adição e subtração. Por exemplo,
significa
Dizemos que * e / têm precedência maior que + e -. As sequências de adições e subtrações são lidas da esquerda para a direita, assim como as sequências de multiplicações e divisões. Assim,
significa
Dizemos que os operadores +, -, * e / são associativos à esquerda.
Não há limite (em princípio) para a profundidade desse aninhamento e para a complexidade geral das expressões que o interpretador JavaScript pode avaliar. Somos nós, humanos, que podemos ficar confusos com expressões ainda relativamente simples, como
que o interpretador avaliaria prontamente como sendo 57. Podemos nos ajudar escrevendo tal expressão na forma
para separar visualmente os principais componentes da expressão.
Mesmo com expressões complexas, o interpretador sempre opera no mesmo ciclo básico: ele lê uma instrução digitada pelo usuário, avalia a instrução e imprime o resultado. Este modo de operação é frequentemente expresso dizendo que o interpretador é executado em um loop de leitura-avaliação-impressão (também conhecido como REPL). Observe em particular que não é necessário instruir explicitamente o interpretador a imprimir o valor da instrução.1
[1] O JavaScript obedece à convenção de que cada instrução tem um valor (consulte o exercício 4.8). Essa convenção, junto com a reputação dos programadores JavaScript de não se preocuparem com a eficiência, nos leva a parafrasear uma piada sobre os programadores Lisp de Alan Perlis (que estava parafraseando Oscar Wilde): Os programadores JavaScript sabem o valor de tudo, mas o custo de nada.
📝 Encontrou algo errado nesta página?
Sua ajuda é muito importante para melhorar a qualidade da tradução!
🐛 Encontrou um erro?
Se você encontrou:
- Erro de tradução (palavra incorreta, termo técnico errado)
- Erro de ortografia ou gramática
- Link quebrado
- Código de exemplo que não funciona
- Problema de formatação
❓ Tem uma dúvida?
Se você tem:
- Dúvida sobre o conteúdo desta seção
- Pergunta sobre um conceito do SICP
- Dificuldade em entender algum exemplo
- Questão sobre a tradução de algum termo
💡 Tem uma sugestão de melhoria?
Se você quer sugerir:
- Melhoria na explicação
- Exemplo adicional
- Recurso visual (diagrama, ilustração)
- Qualquer outra ideia
🌍 Quer discutir a tradução?
Se você quer debater:
- Escolha de tradução de algum termo
- Consistência de terminologia
- Nuances do português
Obrigado por ajudar a melhorar o SICP.js PT-BR! ✨