Fork me on GitHub
#clojure-brasil
<
2017-12-09
>
naomijub01:12:00

Hoje meu time teve hackday, e nos divertimos passando um codigo legadão (2002) para Clojure. de 54 classes para 3 namespaces com 5 funções cada. Agora falta por isso em produção pra ontem

gilmar10:12:12

Que show @jnaomi, onde trabalho sei que não consigo fazer nada em Clojure, até por que a galera não curte JVM, gostam de Python, mas vou tentar fazer todos os meus novos projetos com Clojure

matheusashton16:12:08

Olá pessoal, tudo bom? meu nome é Matheus, eu trabalho há bastante tempo com desenvolvimento, mas nos últimos anos que comecei a estudar funcional e escolhi clojure como minha linguagem para praticar os estudos, (fiz bastante coisa com JS funcional tb). Atualmente estou desenvolvendo um projetinho pessoal, e me deparei com algumas questões conceituais. Quando estava estudando funcional em JS, eu usava bastante um projeto de implementações de monads para tornar o meu código mais fácil de compor e isolar os side effects. No meu projeto atual em clojure eu leio um arquivo texto, faço o parsing desse arquivo e salvo as informações em um banco, me deparei com 2 questões: 1) não sei como isolar os side effects de uma forma clojure-like, procurei sobre uso de monads em clojure, mas não achei muito material e nada que fosse esclarecedor. 2) Ao parsear o arquivo, eu posso encontrar alguns problemas de conversão (para data, por exemplo). Qual seria a melhor forma de tratar esses erros? Em JS eu recorreria novamente às monads, não sei bem como tratar isso em clojure.

caio00:12:36

sobre (2), em clojure a galera gosta de usar exceptions 😞 eu normalmente recorro a either monad. tem uma lib legal com algumas monads implementadas e q é bem mais fácil de usar q o clojure.algo.monads: https://github.com/funcool/cats o suporte tá meio largado, mas ainda acho q vale a pena usar

caio00:12:38

sobre isolar side effects, normalmente é só organização de código msm (manter funções puras em namespaces separados das impuras). nunca vi nada muito diferente disso

matheusashton16:12:33

desculpe o textão 😅

matheusashton16:12:51

aceito qualquer tipo de feedback e desde já agradeço a ajuda 😄

fabrao18:12:39

@matheusashton Tudo bem? Normalmente para fazer parser de arquivos eu uso o Instaparse, você define sua gramática e ele te entrega a estrutura pronta. Para processar os dados eu uso defmulti que deixa o código muito limpo no processamento dos tags. Em relação aos erros, o Insta já processa a gramática e valida diretamente indicando onde está o erro pela regra que você definiu. Então, essa é minha dica.

matheusashton20:12:23

opa valeu 😉 eu tinha visto esse cats, achei bem bacana, mas é comum o uso dessas monads em clojure?

matheusashton20:12:34

eu vi uns artigos criticando por clojure não ser tipado etc

fabrao21:12:57

@matheusashton Você pode usar a notação ^ para otimizar a compilação para rodar mais rápido, ou usar http://typedclojure.org/, mas não sei se é muito usado, eu não uso.

fabrao21:12:38

para validação de dados usa-se o https://clojure.org/guides/spec

matheusashton22:12:01

valeu! vou dar um aolhada