Operador Pipe
Nesta página
O operador |> injeta o valor da esquerda como primeiro argumento da chamada da
direita. Isso inverte a leitura de dentro para fora (f(g(h(x)))) para a ordem
natural de execução (x |> h() |> g() |> f()), tornando o código auto-descritivo.
A forma mais simples encadeia funções de um único argumento:
Pipelines simples e multi-linha; |> com argumentos extras — o valor da esquerda vai sempre para o primeiro slot.
01-pipe-basics.zolo
// Feature: Pipe operator `|>` — fundamentals
// Syntax: `value |> f()` injects `value` as the 1st argument of `f`.
// When to use: read transformations in natural order (data-first), instead
// of nesting calls. Replaces `f(g(h(x)))` with `x |> h() |> g() |> f()`.
fn double(x: int) -> int {
return x * 2
}
fn add_one(x: int) -> int {
return x + 1
}
fn square(x: int) -> int {
return x * x
}
// Simple pipeline: 3 -> 6 -> 7 -> 49.
let r = 3 |> double() |> add_one() |> square()
print(r)
// expected: 49
// Same computation without pipe — reads inside-out.
let r2 = square(add_one(double(3)))
print(r2)
// expected: 49
// Pipe with extra arguments: the LHS goes as the FIRST arg.
fn add(a: int, b: int) -> int {
return a + b
}
fn mul(a: int, b: int) -> int {
return a * b
}
// 5 |> add(10) calls add(5, 10) = 15; then mul(15, 3) = 45.
let calc = 5 |> add(10) |> mul(3)
print(calc)
// expected: 45
// Multi-line pipeline — each step stands out.
let chain = 1
|> add(2)
|> mul(10)
|> add(5)
print(chain)
// expected: 35
Desafio
Adicione uma função negate(x: int) -> int que retorna -x e insira-a como
quarto passo do pipeline chain. Qual é o resultado esperado?
Veja também