Pular para o conteúdo

Ações como valores

Passar uma ação para outra, devolver uma ação, lambda — e o pipeline como a forma idiomática.

Uma ação é um valor como outro qualquer: pode ser guardada numa variável, passada como argumento e devolvida por outra ação. É o que permite escrever ordenar(pessoas, pela_idade) em vez de uma ordenação nova para cada campo.

dataforge
action aplicar_duas_vezes(f, x):
    yield f(f(x))

dobro := lambda n: n * 2
assert aplicar_duas_vezes(dobro, 3) is 12

// Uma acao que DEVOLVE uma acao.
action multiplicador(k):
    yield lambda n: n * k

triplo := multiplicador(3)
assert triplo(5) is 15

pessoas := [{"nome": "Bia", "idade": 30}, {"nome": "Ana", "idade": 25}]
assert sorted(pessoas, lambda p: p["idade"])[0]["nome"] is "Ana"

O pipeline#

dataforge
vendas := [120, 45, 300, 80, 15]

// filtrar, transformar, reduzir — lido de cima para baixo
total := vendas
    >> sift v: v bigger_eq 50
    >> morph v: v * 0.9
    >> distill acc, v: acc + v 0

assert total is 450.0

Continue em Closures e Pipelines.