This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-10-12
Channels
- # aleph (3)
- # announcements (7)
- # babashka (22)
- # beginners (44)
- # calva (19)
- # chlorine-clover (1)
- # cider (20)
- # clj-kondo (55)
- # clojure (100)
- # clojure-austin (9)
- # clojure-europe (19)
- # clojure-italy (19)
- # clojure-nl (13)
- # clojure-portugal (2)
- # clojure-uk (7)
- # clojurescript (38)
- # community-development (3)
- # conjure (2)
- # cryogen (57)
- # cursive (6)
- # datalog (3)
- # datomic (24)
- # emacs (17)
- # exercism (8)
- # fulcro (3)
- # holy-lambda (8)
- # jobs (6)
- # jobs-discuss (9)
- # joker (3)
- # lambdaisland (5)
- # leiningen (5)
- # music (9)
- # nextjournal (1)
- # nrepl (2)
- # off-topic (9)
- # other-languages (4)
- # pathom (6)
- # polylith (23)
- # re-frame (5)
- # reagent (5)
- # remote-jobs (1)
- # reveal (1)
- # shadow-cljs (3)
- # tools-build (1)
- # tools-deps (3)
- # xtdb (2)
buonasera a tutti! qualcuno puo’ illuminarmi riguardo agli argomenti delle funzioni? Quali sono gli use case tra passare gli argomenti “normalmente”, senza destructuring diciamo vs passare tutto in una mappa? Ed inoltre, c’e’ un modo di fare destructoring per una funzione tipo (f :a true)
e prendere il valore di :a ma senza renderlo opzionale?
Ti direi di stare attento ad usare mappe dapperttutto. Diventa facile perdere di vista cosa sta passando nella mappa che non e' di pertinenza della funzione corrente, e quindi rompere qualcosa di distante downstream che aveva bisogno di una certa chiave nella mappa.
In generale, direi di essere espliciti con gli argomenti finche' non ci sia una ragione per operare in altra maniera.
potrebbe essere una buona regola, se ci sono piu’ di 3 argomenti, considera se usare una mappa? quello che non mi piace e’ vedere una call ad una funzione ed usare l’ordine degli argomenti per vedere dove sono mappati
non so se mi sono spiegato bene 😄
Quindi cosa c'e' che non va qui sotto?
(defn myfn [a-num a-string a-vector])
(myfn 1 "a" [1 2])
qua niente pero’ qui si secondo me, c’e’ qualcosa che non va
(defn [a b c d e f g])
anzi ti dico, a-num a-string a-vector sono anche nomi che mi fanno riconoscere cosa le cose sono guardando il tipo del parametro che sto passando
se non c’e’ il tipo, devo andare sulla call della funzione, emacs mi dice la sua definizione e poi devo mappare mentalmente i parametri
se invece ho:
(f {:a "a" :b "b" :c "c"})
so gia’ nome del parametro e suo valore
cmq si concordo con te ovviamente che usare mappe DAPPERTUTTO non e’ buona cosa
perche’ poi ti perdi e non sai piu’ cosa contengono
Un altro problema nell'uso delle mappe è la mancanza di controllo della presenza di un parametro a compile time. Se ho (defn f [a b c] ...)
e chiamo (f 1 2)
se ne accorge subito...
Giusto, posso sempre usare pre conditions e controllare la presenza delle chiavi però no?
Che funzionano a runtime ovvio però se ho test su quelle funzioni io sono già contento
@UQ8KS67UL generalmente faccio come te, positional arguments fino a che sono pochi (3-4) e poi una mappa
io ultimamente mi trovo a passare tutto via mappa gigante perche’ mi trovo bene ma non so quale sia la best practice in generale 🙂