This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-08-17
Channels
- # announcements (7)
- # babashka (24)
- # beginners (11)
- # boot (16)
- # calva (46)
- # cider (5)
- # clara (3)
- # clj-kondo (2)
- # cljfx (5)
- # clojure (122)
- # clojure-brasil (26)
- # clojure-dev (20)
- # clojure-europe (20)
- # clojure-germany (1)
- # clojure-nl (1)
- # clojure-norway (54)
- # clojure-uk (2)
- # clojurescript (6)
- # core-matrix (23)
- # datomic (85)
- # graalvm (1)
- # honeysql (9)
- # hyperfiddle (31)
- # lsp (3)
- # malli (9)
- # nbb (2)
- # off-topic (15)
- # pathom (15)
- # pedestal (4)
- # polylith (5)
- # re-frame (5)
- # reitit (9)
- # releases (2)
- # shadow-cljs (63)
- # specter (4)
- # xtdb (7)
Quebrando gelo
❓ Qual função de Clojure que você acha que pouca gente usa/conhece e que você acha interessante??
So pode uma ? 😛
clojure.core/comp
, clojure.core/complement
e clojure.core/interpose
clojure.core/interpose
parece bem interessante! hahah não conhecia
@U07KV197X é iteration
mesmo? ou iterate
?
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.
hmmm procurei no https://clojuredocs.org/ e não achei 😕
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
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
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
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
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

eu adoro juxt. pra mim é um fazedor de forma de tijolo. mto bom pra fazer planilha
juxt é um bagulho que eu preciso aprender mais pra ter no repertório
vai crescendo junto com o nivel de desespero
(-> 3
inc
(doto (as-> %
(def _x %)
(prn %)
(tap> %)))
dec)
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
> Outro uso legal: @U2J4FRT2T me perdi, não entendi sobre o que vc ta falando 😅 pode me explicar? 🙏
é 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

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
)

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