This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2019-08-15
Channels
- # announcements (1)
- # beginners (101)
- # boot (13)
- # cider (38)
- # cljdoc (10)
- # cljs-dev (37)
- # cljsrn (6)
- # clojure (74)
- # clojure-dev (8)
- # clojure-europe (3)
- # clojure-italy (36)
- # clojure-losangeles (2)
- # clojure-nl (5)
- # clojure-spec (15)
- # clojure-uk (49)
- # clojuredesign-podcast (2)
- # clojurescript (52)
- # cursive (6)
- # datomic (19)
- # fulcro (35)
- # graalvm (16)
- # graphql (4)
- # kaocha (1)
- # leiningen (26)
- # luminus (3)
- # re-frame (10)
- # reagent (14)
- # ring-swagger (37)
- # rum (2)
- # schema (4)
- # shadow-cljs (148)
- # spacemacs (13)
- # specter (1)
- # sql (46)
- # tools-deps (3)
- # vim (4)
Hehe si buon lavoro anche a me
buongiorno a tutti
mega domanda del giorno: quando usare pre-post e quando usare spec? E poi quando "speccare" le funzioni in generale? Io scriverei spec solo per funzioni che stanno ai confini del sistema, che dipendono cioĆØ da cose di cui non abbiamo il controllo. cosa dite?
pre-post per funzioni di cui non mi interessa fare instrumenting
ai confini del sistema e' abbastanza la norma a quanto ne so
pre/post mah dove vuoi, non sono tanti usati almeno dai noi
Io mi sono imbattuto in persone che speccano tutto e chi non specca niente.. direi che un happy middle sarebbe speccare cio' che ha senso.. come nel tuo caso..
Pre-post conditions sono utili per forzare semplici assunzioni su input/output di una funzione. Dico semplici percheā eā codice Clojure che viene assemblato a macro-expansion. Prendi ad esempio:
(defn save! [item]
{:pre [(map? item)
(string? (:name item))
(#{:double :triple} (:width item))]
:post [(= 10 (:id %))]}
(assoc item :id 10))
Immagina se volessi riutilizzare la stessa precondizione in altri posti. Dovresti create una macro che espande passando āitemā come parametro etc. Non piacevole. Spec invece eā piuā immediato per definire āitemā, vedere se valida e quando non valida sapere il percheā.Riguardo a quando usare spec, sono per la scuola del āquando un oggetto entra nel sistema attraverso intefacce pubblicheā (quindi ai confini, concordo). Qualche volta lo vorrei anche usare per generative testing, ma in generale mi costringe a scrivere spec di parti del sistema che non sono ai margini, quindi alla fine non succede. Mi eā anche utile per descrivere regole sintattiche di DSL varie ed ottenere un parser for free.
lāultima volta che in team ho avuto qualcuno che voleva āspeccareā tutto a prescindere, gli ho semplicemente detto che ha sbagliato linguaggio š¬
domanda sullo "stile", come vedete un flow per un'applicazione semplice (tic-tac-toe) che scrive solo su console dove c'ĆØ una sola mappa che rappresenta lo stato del gioco e questa mappa ĆØ passata a varie funzione le quali via destructuring si prendono le chiavi che gli interessano ed aggiornano lo stato del gioco mano a mano che il gioco va avanti? e poi, fare un loop infinito per fare giocare i giocatori ha senso farlo con un semplice (while (not (check-win state)))
o ci sarebbe qualcosa di piĆ¹ idiomatico secondo voi?
Se sono due computer a giocare puoi usare quell'approccio e mantenere tutto pure senza side effects.. ma per due umani hai bisogno di un on-click handler per ogni casella e' un atom da swappare ad ogni user input.. no?
I giocatori giocano in sequenza non in parallelo
E danno via console le coordinate delle caselle
Il side effect c'Ć© solo quando stampo il campo di gioco
(In teoria)
la classica cosa che si fa e' ritornare sempre nuove boards
cosi eviti di mutare qualsiasi cosa
in realta' non ti serve un atomo per niente, e la cosa bella di ritornare nuove boards e' che se vuoi (con una atomo in questo caso) puoi salvare tutta la storia
e andare avanti e indietro
ok ok allora sembra che sono sulla strada giusta, per adesso ritorno sempre nuove boards, mi basta usare loop
e dovrei esserci š