proc main(): void {
echo 7 + 3 * 2 // 13 — * liga mais forte que +
echo 7 / 2 // 3 — divisão de Int trunca
echo 7 % 2 // 1 — o resto
echo 2 ** 3 ** 2 // 512 — ** agrupa pela direita
echo -2 ** 2 // -4 — ** liga mais forte que o menos unário
echo 3 < 4 // ordenação: Int, Float e Str
echo "bee" == "bee" // igualdade estrutural
echo [1, 2] != [2, 1]
}proc main(): void {
echo "hive" + " " + "tour" // Str: juntadas
echo [1, 2] + [3] // vetores: um novo, os tamanhos somados
}proc main(): void {
ready := true
warm := false
echo ready && warm
echo ready || warm
echo !warm
// Mais forte que qualquer comparação, então estes dois precisam dos parênteses.
echo !(ready && warm)
echo !(1 == 2)
}proc main(): void {
mut n := 10
n += 5
n -= 3
n *= 2
n /= 4
n++
n--
echo n // 6
mut greeting := "olá"
greeting += ", bee"
echo greeting
}Cada operador é definido para certos tipos, e usá-lo em qualquer outra coisa é um erro de compilação:
+ soma dois números, junta duas Strs, e junta dois vetores em um novo cujo tamanho é a soma dos dois.- * / % ** são aritmética, sobre Int ou Float.== e != comparam dois valores de um mesmo tipo estruturalmente — elemento por elemento ao longo de um vetor, campo por campo através de um tipo declarado. Dois valores de função não podem ser comparados, e dois tipos diferentes são um erro, não um false silencioso.< > <= >= ordenam um Int, um Float ou uma Str, e nada mais.&& e || recebem Bools e fazem curto-circuito. Não existe truthiness: um Int, uma Str, um Atom ou um vetor não é uma condição.- unário nega um número; o ! unário inverte um Bool.Do mais fraco ao mais forte: ||, &&, depois is e bounds, depois as comparações, + -, * / %, o pipe |, o - e o ! unários, e o mais forte, **. Então !found && ready é (!found) && ready, -2 ** 2 é -(2 ** 2), e ** agrupa pela direita: 2 ** 3 ** 2 é 2 ** 9. Comparações não se encadeiam — 1 < x < 3 é um erro de compilação — e ! não pode ser aplicado a uma expressão que contenha um is, já que o que um casamento vincula nunca poderia ser preenchido; escreva o else em vez disso.
Uma variável mut avança com += -= *= /=, cada um atalho para x = x <op> …, e um Int com ++ e --. += também junta uma Str. Nenhum deles converte um número pelas suas costas: hive.math.max(0, health) com um health Int é um erro de compilação em vez de uma surpresa.