Fork me on GitHub
#clojure-italy
<
2021-10-12
>
Andrea Imparato16:10:36

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?

reborg14:10:28

eh eh ci sarebbe da scrivere parecchio perche' non c'e' una regola unica.

reborg14:10:46

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.

1
reborg14:10:45

In generale, direi di essere espliciti con gli argomenti finche' non ci sia una ragione per operare in altra maniera.

Andrea Imparato14:10:21

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

Andrea Imparato14:10:28

non so se mi sono spiegato bene 😄

reborg14:10:34

Quindi cosa c'e' che non va qui sotto?

(defn myfn [a-num a-string a-vector])
(myfn 1 "a" [1 2])

Andrea Imparato15:10:30

qua niente pero’ qui si secondo me, c’e’ qualcosa che non va (defn [a b c d e f g])

Andrea Imparato15:10:39

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

Andrea Imparato15:10:20

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

Andrea Imparato15:10:50

se invece ho: (f {:a "a" :b "b" :c "c"})

Andrea Imparato15:10:59

so gia’ nome del parametro e suo valore

Andrea Imparato15:10:21

cmq si concordo con te ovviamente che usare mappe DAPPERTUTTO non e’ buona cosa

Andrea Imparato15:10:35

perche’ poi ti perdi e non sai piu’ cosa contengono

mdallastella19:10:52

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...

Andrea Imparato20:10:42

Giusto, posso sempre usare pre conditions e controllare la presenza delle chiavi però no?

Andrea Imparato07:10:30

Che funzionano a runtime ovvio però se ho test su quelle funzioni io sono già contento

helios15:10:46

@UQ8KS67UL generalmente faccio come te, positional arguments fino a che sono pochi (3-4) e poi una mappa

Andrea Imparato17:10:27

io ultimamente mi trovo a passare tutto via mappa gigante perche’ mi trovo bene ma non so quale sia la best practice in generale 🙂