Records em Clojure
Records são uma alternativa aos mapas, projetados especificamente para representar dados de domínio com campos pré-definidos.
- Performance: Records geralmente possuem melhor desempenho que mapas comuns para acesso e armazenamento de campos fixos.
- Polimorfismo: Diferente dos mapas, os Records possuem um “tipo” nomeado, o que permite comportamentos polimórficos na linguagem.
Utiliza-se a macro defrecord para especificar os nomes dos campos, que serão tratados internamente como chaves de keyword.
(defrecord Person [first-name last-name age occupation])Construtores
Clojure gera automaticamente dois tipos de construtores para cada Record:
Posicional:
(def kelly (->Person "Kelly" "Keen" 32 "Programmer"))Via Mapa:
(def kelly (map->Person {:first-name "Kelly" ...}))Restrição
Embora possam ser acessados como mapas (ex:
(:age kelly)), os Records não podem ser invocados como funções, diferentemente dos mapas.