Pular para o conteúdo

Threading Macro

Em Clojure, -> e ->> são macros de encadeamento (threading macros) que facilitam a leitura e a escrita de código ao aplicar uma série de funções a um valor inicial. A diferença entre elas está na posição em que o valor inicial é inserido nas chamadas de função subsequentes.

A macro -> insere o valor inicial como o primeiro argumento de cada função subsequente.

Exemplo:

(-> 5
(+ 3) ; (+ 5 3)
(* 2)) ; (* 8 2)

Resultado: 16

A macro ->> insere o valor inicial como o último argumento de cada função subsequente.

Exemplo:

(->> 5
(inc) ; (inc 5)
(* 2)) ; (* 2 6)

Resultado: 12

Para ilustrar a diferença, considere as seguintes funções:

(defn add [a b] (+ a b))
(defn multiply [a b] (* a b))

Usando ->:

(-> 5
(add 3) ; (add 5 3)
(multiply 2)) ; (multiply 8 2)

Resultado: 16

Usando ->>:

(->> 5
(add 3) ; (add 3 5)
(multiply 2)) ; (multiply 2 8)

Resultado: 16

Note que, no caso acima, o resultado é o mesmo, mas a posição dos argumentos nas funções add e multiply é diferente.