Acesso a campos de entidades via keywords


Embora existam várias formas de busca de dados em maps, a maneira mais comum em Clojure para acessar valores de campos é invocar a própria keyword como uma função.

Assim como os mapas e conjuntos, as keywords em Clojure são funções que realizam uma busca de si mesmas na estrutura de dados que lhes é passada como argumento.

Sintaxe:

(:campo entidade)

Exemplo:

(def person
  {:first-name "Kelly"
   :last-name "Keen"
   :age 32
   :occupation "Programmer"})
 
(person :occupation)
;; => "Programmer"

Embora o jeito acima funcione, a forma mais comum de acessar um campo é utilizando a keyword na posição de função, pois isso garante uma maior segurança contra NullPointerException. Veja o exemplo abaixo.

(:occupation person)
;; => "Programmer"

NOTE

Se o mapa passado for nil, a keyword invocada retornará apenas nil em vez de lançar um erro, o que torna o código mais robusto.

Suporte a Valor Padrão

Assim como o get, a invocação da keyword aceita um valor opcional caso a chave não exista.

Por exemplo:

(:favorite-color person "beige")

Referências


https://clojure.org/guides/learn/hashed_colls#_field_accessors