Closures em Clojure
Uma closure (clausura) é uma função que “captura” o ambiente onde foi criada, mantendo acesso às variáveis do seu contexto original.
NOTE
Elas são geradas através da Forma especial fn.
Uma closure “fecha” (closes over) o escopo circundante, capturando valores de símbolos como parâmetros de funções ou definições de um let.
A característica fundamental é a persistência: os valores capturados permanecem disponíveis mesmo após o escopo léxico original ter sido encerrado ou saído de execução.
Isso permite a criação de funções altamente dinâmicas que carregam consigo um “estado” ou configuração inicial.
(defn criar-calculadora [taxa]
(fn [valor-base]
(* valor-base (+ 1 taxa))))
(def calcular-iva-portugal (criar-calculadora 0.23))
(def calcular-iss-brasil (criar-calculadora 0.05))
(calcular-iva-portugal 100) ; Retorna 123.0
(calcular-iss-brasil 100) ; Retorna 105.0Neste exemplo, utilizamos a forma especial fn para capturar uma taxa de imposto específica e criar funções que já “sabem” qual taxa aplicar, sem precisar recebê-la novamente em cada chamada.
Referências
https://clojure.org/guides/learn/functions#_closures
https://pt.stackoverflow.com/questions/1859/como-funcionam-closures-em-javascript