BT

Clojure 1.9 chega com Spec e novas funcionalidades para a linguagem

| por Sergio De Simone Seguir 12 Seguidores , traduzido por Danilo Pereira de Luca Seguir 0 Seguidores em 23 mar 2018. Tempo estimado de leitura: 1 minuto |

Como informado anteriormente pelo InfoQ, a funcionalidade mais interessante na última versão do Clojure 1.9 é o Spec, que fornece um sistema padrão e integrado para a especificações e testes de dados e funções.

Aproveitando o trabalho em outros sistemas contratuais, como o Racket, Spec visa permitir validar automaticamente o código de Clojure, além de suportar várias tarefas, como testes generativos, relatórios de erros, desestruturação e muito mais. É assim que você pode especificar um mapa, usando especificações / chaves:

(spec/keys :req [::x ::y (or ::secret (and ::user ::pwd))]
           :opt [::z])

As chaves usadas em uma especificação de mapa são algo remanescentes de união de etiquetas discriminadas como encontradas em outras linguagens, na medida em que você define seus tipos globalmente para um namespace:

(spec/def ::x integer?)
(spec/def ::y integer?)
(spec/def ::z integer?)
(spec/def ::secret string?)

Isso significa que a mesma especificação de tipo é aplicada a ocorrências de uma determinada chave em qualquer mapa definido no mesmo módulo. Se você quiser usar as chaves definidas em um namespace diferente, você pode usar a nova sintaxe de mapeamento no namespace:

#:types{ :x 1
         :y 2
         :secret "xyz" }

Isto é interpretado como:


{ :types/x 1
  :types/y 2
  :types/secret "xyz }

Enquanto o Clojure 1.9 já está em uma versão estável, Spec ainda está em uma versão alfa e as bibliotecas correspondentes devem ser incluídas manualmente. Ser alfa implica que a compatibilidade da API não é garantida.

Para aumentar a expressividade do Spec, o Clojure 1.9 adicionou vários predicados novos, incluindo booleano?, double?, simple-symbol e muitos mais. Ainda na frente da linguagem, clojure.core apresenta as seguintes novas funções:

  • bounded-count, que permite contar os elementos de uma coleção sem que chegue em um determinado limite.
  • swap-vals! and reset-vals!, duas novas funções atômicas que retornam o valor antigo e novo.
  • halt-when, um transducer que termina a transdução quando um determinado predicado é satisfeito.

Clojure 1.9 também apresenta várias melhorias de performance, incluindo seq otimizado e desestruturação, cache de derivação de classe para acelerar a compilação e outros.

Clojure 1.9 pode ser instalado usando brew no macOS e um script de instalação no Linux. No Windows, você ainda precisa instalar o Leiningen ou o Boot.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT