Fork me on GitHub
#clojure-brasil
<
2023-08-17
>
Arthur Fücher19:08:22

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

ericdallo19:08:09

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

😂 2
eduardomrb19:08:47

clojure.core/iteration

👍 2
Arthur Fücher19:08:31

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

Arthur Fücher19:08:45

@U07KV197X é iteration mesmo? ou iterate?

eduardomrb19:08:44

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

nice 2
ericdallo19:08:21

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.

ericdallo19:08:15

achei a api/doc do iteration ruinzinha hehe

👍 2
Arthur Fücher19:08:17

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

ericdallo19:08:05

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

😱 4
😢 4
chico12:08:41

Eu aprendi sobre fnil e letfn outro dia, achei massa

🤯 4
rafaeldelboni15:08:43

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

rafaeldelboni15:08:28

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

ericdallo15:08:59

hahah ja parece menos enrolado que o original 👀

rafaeldelboni15:08:49

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

❤️ 4
👑 4
souenzzo09:08:18

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

clojure-spin 6
😍 2
geraldodev16:08:01

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

👍 2
Arthur Fücher16:08:31

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

souenzzo15:08:20

Outro uso legal:

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

souenzzo15:08:22

ou mesmo:

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

souenzzo15:08:14

vai crescendo junto com o nivel de desespero

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

2
souenzzo15:08:15

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

Arthur Fücher16:08:46

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

souenzzo16:08:04

é 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

👍 2
thanks2 2
souenzzo09:08:02

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)

nice 4
souenzzo09:08:14

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")

souenzzo09:08:02

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)

nice 4