Pular para o conteúdo

Precedência

A ordem de avaliação dos operadores, do mais forte ao mais fraco.

NívelOperadoresAssociatividade
1() [] . ?. withesquerda
2**direita
3- + not (unários)direita
4* / % ~/ //esquerda
5+ -esquerda
6comparações, in, not inencadeável
7notdireita
8andesquerda
9oresquerda
10??esquerda
11given … otherwise (ternário)direita
12>>esquerda

As consequências que surpreendem#

dataforge
out 2 ** 3 ** 2    # 512, e não 64 — potência associa à direita
out -2 ** 2        # -4, e não 4 — o sinal aplica depois da potência
out 2 + 3 * 4      # 14

Por que ** associa à direita#

É a convenção matemática: 2³² significa 2^(3²) = 2⁹ = 512, não (2³)² = 64. Python, Ruby e Haskell fazem o mesmo.

Por que o unário vem depois#

-2 ** 2 é lido como -(2 ** 2). Isso também segue a matemática: −2² é −4. Para elevar o negativo, use parênteses: (-2) ** 2 dá 4.

O pipeline é o mais fraco#

Por isso nums >> sift n: n % 2 is 0 funciona sem parênteses: a expressão inteira n % 2 is 0 é avaliada antes que o >> entre em ação.