clojure-brasil

2023-08-17T19:37:22.743619Z

Quebrando gelo Qual função de Clojure que você acha que pouca gente usa/conhece e que você acha interessante?? thinking-face

chico 2023-08-18T12:12:41.586989Z

Eu aprendi sobre fnil e letfn outro dia, achei massa

🤯 2
rafaeldelboni 2023-08-18T15:41:43.252239Z

Ele mês passado, do nada, fez o Merge de uma porrada de coisa e agora parece que não está conseguindo compilar e subir a versão que está na master no host dele pelo que entendi da nota dele aqui: https://github.com/zk/clojuredocs/blob/master/.notes.zk.org#2023-07-24-mon-1014

rafaeldelboni 2023-08-18T15:43:28.416629Z

Eu até comecei a fazer um novo, separei a stack em um cara pra extrair definições de função e documentação em um datalevin, um backend pra gerir a parte social e consultar coisas do datalevin e um front. Eu fiz o extrator e estou no meio do backend, mas estou fazendo just for fun nem sei se minhas decisões foram as melhores na real

ericdallo 2023-08-18T15:43:59.991009Z

hahah ja parece menos enrolado que o original 👀

rafaeldelboni 2023-08-18T15:44:49.200029Z

https://github.com/clj-codes/ Tá tudo bem wip aí se alguém tiver curiosidade, estou andando bem devagar btw, é mais pra estudo e desafio do que mais nada

👑 2
❤️ 2
souenzzo 2023-08-22T15:43:20.177229Z

Outro uso legal:

(-> 3
  inc 
  (doto clojure.pprint/pprint) 
  dec)

souenzzo 2023-08-22T15:44:22.986349Z

ou mesmo:

(-> 3
  inc
  (->> (def _x) deref)
  dec)

souenzzo 2023-08-22T15:45:14.001799Z

vai crescendo junto com o nivel de desespero

(-> 3
  inc
  (doto (as-> %
          (def _x %)
          (prn %)
          (tap> %)))
  dec)

🤣 1
souenzzo 2023-08-22T15:50:15.485059Z

Sobre o as->: ele suporta desconstruição no bind do simbilo. por favor não use!

(-> {}
  (assoc-in [:a :a :a] 3)
  (as-> {:keys [a]} a a a)
  identity)
=> 3

2023-08-22T16:18:46.222439Z

> Outro uso legal: @souenzzo me perdi, não entendi sobre o que vc ta falando 😅 pode me explicar? 🙏

souenzzo 2023-08-22T16:44:04.642309Z

é possivel compor as macros -> ->> as-> cond-> doto ... etc por exemplo, quando vc está em um ->, no meio da cadeia de funcoes, as vezes vc quer colocar um print, sem comprometer o retorno algumas libs de log implementam o log/spy que faz isso Mas é possivel também compor o (-> ... (doto prn) ...) para obter o mesmo resultado

👍 1
1
ericdallo 2023-08-17T19:39:09.255739Z

So pode uma ? 😛 clojure.core/comp , clojure.core/complement e clojure.core/interpose

😂 1
eduardomrb 2023-08-17T19:39:47.496489Z

clojure.core/iteration

👍 1
2023-08-17T19:46:31.855169Z

clojure.core/interpose parece bem interessante! hahah não conhecia

2023-08-17T19:46:45.760469Z

@eduardomrb é iteration mesmo? ou iterate?

eduardomrb 2023-08-17T19:47:44.239869Z

@arthurfucher iteration mesmo; relativamente nova, veio com clojure 1.11

1
ericdallo 2023-08-17T19:48:21.267349Z

clojure.core/iteration [step & {:keys [somef vf kf initk] :or {vf identity kf identity somef some? initk nil}}]

Creates a seqable/reducible via repeated calls to step,
a function of some (continuation token) 'k'. The first call to step
will be passed initk, returning 'ret'. Iff (somef ret) is true,
(vf ret) will be included in the iteration, else iteration will
terminate and vf/kf will not be called. If (kf ret) is non-nil it
will be passed to the next step call, else iteration will terminate.

This can be used e.g. to consume APIs that return paginated or batched data.

 step - (possibly impure) fn of 'k' -> 'ret'

 :somef - fn of 'ret' -> logical true/false, default 'some?'
 :vf - fn of 'ret' -> 'v', a value produced by the iteration, default 'identity'
 :kf - fn of 'ret' -> 'next-k' or nil (signaling 'do not continue'), default 'identity'
 :initk - the first value passed to step, default 'nil'

It is presumed that step with non-initk is unreproducible/non-idempotent.
If step with initk is unreproducible it is on the consumer to not consume twice.

ericdallo 2023-08-17T19:49:15.106539Z

achei a api/doc do iteration ruinzinha hehe

👍 1
2023-08-17T19:49:17.828429Z

hmmm procurei no https://clojuredocs.org/ e não achei 😕

ericdallo 2023-08-17T19:50:05.443809Z

o clojuredocs ta sem clojure 1.11 pq o mano nao ta mais mantendo, estamos tentando trazer pro clj-common https://clojurians.slack.com/archives/CE1A21MPF/p1688563409482329

😢 2
😱 2
souenzzo 2023-08-21T09:02:18.911729Z

gosto muito dessa combinação de transducers com juxt aqui: (into {} (map (juxt :id identity)) coll) o que faz: transforma uma coleção em um mapa, indexado pela chave :id

3
😍 1
2023-08-21T16:36:01.318749Z

eu adoro juxt. pra mim é um fazedor de forma de tijolo. mto bom pra fazer planilha

👍 1
2023-08-21T16:59:31.833349Z

juxt é um bagulho que eu preciso aprender mais pra ter no repertório

souenzzo 2023-08-24T09:16:02.795379Z

Mais uma função do dia: (find {:a 42} :a) => [:a 42] (find {:a 42} :b) => nil Bem util para quem usa datomic (transformar mapas em eid)

2
souenzzo 2023-08-24T09:16:14.025819Z

também é legal usar no if-let e tal

(if-let [[_ a] (find params :a)]
  "se a existir, mesmo que {:a nil}"
  "se a não estiver presente em params")