Expressões e operadores
Uma expressão é um trecho de código que produz um valor. Literais como 4, true e "Pop" são expressões. Nomes, chamadas de função e operações também são expressões.
local base = 20local result = base * 2 + 2Pop avalia a multiplicação antes da adição, portanto result é 42. Parênteses podem tornar explícita uma ordem diferente:
local result = base * (2 + 2)Aritmética
Seção intitulada “Aritmética”Pop oferece os operadores numéricos conhecidos:
| Operador | Significado |
|---|---|
+ |
adição |
- |
subtração |
* |
multiplicação |
/ |
divisão |
% |
resto inteiro |
Os dois operandos devem ter o mesmo tipo numérico. Pop não mistura silenciosamente, por exemplo, Int32 e Int64. O operador % está disponível somente para inteiros.
A aritmética de inteiros é verificada. Estouro, divisão por zero e o menor valor com sinal dividido por -1 interrompem a execução com um trap, em vez de produzir um valor com contorno.
O operador unário - nega um número com sinal. Inteiros sem sinal não podem ser negados.
Comparando valores
Seção intitulada “Comparando valores”Operadores de comparação produzem um Boolean:
local same = left == rightlocal different = left ~= rightlocal smaller = left < rightlocal atMost = left <= rightlocal greater = left > rightlocal atLeast = left >= right== testa igualdade e ~= testa desigualdade. A ordenação com <, <=, > e >= está disponível para dois números do mesmo tipo.
A igualdade é deliberadamente orientada por tipos. Ela funciona para nil, booleanos, inteiros, strings e valores compostos aceitos. Arrays, tabelas e funções não têm igualdade geral de valores nesta versão. Classes comparam sua identidade: dois nomes são iguais quando se referem ao mesmo objeto.
Lógica booleana
Seção intitulada “Lógica booleana”Use and, or e not com valores Boolean:
local canEnter = hasTicket and not bannedlocal needsHelp = lost or injuredand para assim que seu lado esquerdo é false, pois a expressão completa não pode mais se tornar verdadeira. or para assim que seu lado esquerdo é true. Esse comportamento de curto-circuito é útil quando o lado direito só deve ser executado se necessário.
Strings e conversão
Seção intitulada “Strings e conversão”Use .. para concatenar strings, crases para interpolação e String(value) para formatar primitivas explicitamente:
local count = 3local joined = "count=" .. String(count)local interpolated = `count={count}`O operador aritmético + permanece intencionalmente restrito a números. Chamadas a tipos numéricos de destino realizam uma conversão explícita:
local count: Int = 42local compact = Int8(count)local decimal = Float64(count)O estreitamento de inteiros e conversões inválidas de ponto flutuante para inteiro causam um trap, em vez de contornar o valor ou fazer suposições.
Valores condicionais
Seção intitulada “Valores condicionais”Uma expressão if produz um valor selecionado de forma preguiçosa:
local description = if available then "pronto" else "ausente"Sua condição é Boolean, exatamente um ramo é executado e ambos os ramos têm um único tipo estático.
