Clojure - átomos
Atomssão um tipo de dados no Clojure que fornecem uma maneira de gerenciar o estado independente, síncrono e compartilhado. Um átomo é como qualquer tipo de referência em qualquer outra linguagem de programação. O principal uso de um átomo é manter as estruturas de dados imutáveis de Clojure. O valor mantido por um átomo é alterado com oswap! method.
Internamente, troque! lê o valor atual, aplica a função a ele e tenta compará-lo e defini-lo. Visto que outro thread pode ter alterado o valor no intervalo de tempo, pode ser necessário tentar novamente e o faz em um loop de rotação. O efeito líquido é que o valor será sempre o resultado da aplicação da função fornecida a um valor atual, atomicamente.
Exemplo
Os átomos são criados com a ajuda do método do átomo. Um exemplo do mesmo é mostrado no programa a seguir.
(ns clojure.examples.example
(:gen-class))
(defn example []
(def myatom (atom 1))
(println @myatom))
(example)
Resultado
O programa acima produz o seguinte resultado.
1
O valor de átomo é acessado usando o símbolo @. Clojure possui algumas operações que podem ser realizadas em átomos. A seguir estão as operações.
Sr. Não. | Operações e descrição |
---|---|
1 | Redefinir! Define o valor do átomo para um novo valor, sem levar em consideração o valor atual. |
2 | compare e configure! Atomicamente define o valor do átomo para o novo valor se e somente se o valor atual do átomo for idêntico ao antigo valor mantido pelo átomo. Retorna verdadeiro se definido acontecer, senão retorna falso. |
3 | troca! Atomicamente troca o valor do átomo por um novo com base em uma função específica. |