Usando átomos para gerenciar o estado em seu aplicativo Clojure.

Um dos mecanismos elegantes para gerenciar o estado em Clojure são os átomos.

Em nosso aplicativo de bate-papo – Jane e Joe estão online no momento.

#{"Jane" "Joe"}

Momentos depois, Joy fica online e se junta a eles no chat.

(conj #{"Jane" "Joe"} "Joy")
;; => #{"Joe" "Jane" "Joy"}

Agora que Joy está online, podemos ver que há 3 pessoas online.

(count #{"Joe" "Jane" "Joy"})
;; => 3

Vamos verificar e ter certeza de que Joy está online

(contains? #{"Joe" "Jane" "Joy"} "Joy")
;; => true

Por causa deste exemplo, estamos definindo explicitamente o conjunto que contém o conjunto de pessoas atualmente online.

Para tornar o exemplo mais prático, vamos ver como empregar átomos para gerenciar o estado de nossa lista de pessoas online.

Jack e Peter estão online em nosso aplicativo de bate-papo:

(def people-online(atom #{"Jack" "Peter"}))
;; => #<Atom@1fec1485: #{Peter Jack}>

Aqui, estamos usando a função átomo do Clojures para fornecer uma maneira de gerenciar o estado de um conjunto – aqui nós o definimos como pessoas online

Pouco depois, Jen fica online

(swap! people-online conj "Jen")
;; => #{"Peter" "Jen" "Jack"}

Porque estamos trabalhando com um átomo , usamos a troca! função para alterar o valor do átomo de pessoas online .
Nesse caso, é simples alterá-lo usando conj para adicionar “Jen” ao conjunto de pessoas online.

Você pode acessar um estado de átomos usando deref

(count (deref people-online))
;; => 3

ou usando @

(count @people-online)
;; => 3

Usando o @ way, vamos verificar se Jen está online

(contains? @people-online "Jen")
;; => true

Como podemos ver neste exemplo, a abordagem pragmática e prática de Clojure nos permite gerenciar o estado de uma parte de nossa aplicação – o uso de átomos aqui pode ser aplicado de maneira geral.

Links Úteis