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, o clique do mouse nas instruções JavaScript com fundo escuro é programado de forma que seja exibido um interpretador JavaScript, que pode avaliar a instrução e exibir o valor resultante. A propósito, o programa que faz o clique do mouse em uma instrução JavaScript exibir o interpretador é escrito em JavaScript; é chamado de script para o clique do mouse. Esses scripts eram um objetivo central no design original do JavaScript.
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 nosso script para avaliar a instrução da expressão
Carregando playground de código...
clicando nela, ele responderá exibindo um interpretador JavaScript com a opção de avaliar a instrução pressionando um botão "Run" (Executar). Clique na instrução da expressão primitiva 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 instrções de expressão clicando nela:
Carregando playground de código...
Carregando playground de código...
Carregando playground de código...
Carregando playground de código...
Carregando playground de código...
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:
Carregando playground de código...
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,
Carregando playground de código...
significa
Carregando playground de código...
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,
Carregando playground de código...
significa
Carregando playground de código...
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
Carregando playground de código...
que o interpretador avaliaria prontamente como sendo 57. Podemos nos ajudar escrevendo tal expressão na forma
Carregando playground de código...
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! ✨