Fork me on GitHub
#clojure-norway
<
2022-09-15
>
msolli08:09:32

Morn! Jeg ❤️ Spec. Bruker det til: • Å sjekke at data på vei inn i systemet er riktig (merk: dette ikke validering med tilbakemelding til brukeren, dette er for å sikre mot kodefeil vha. clojure.spec.alpha/assert) • Å generere testdata • Dokumentasjon (som er kjørbar, jfr. punktene over, og derfor ikke råtner)

👌 2
❤️ 1
hkjels08:09:47

Så du bruker det kun under utvikling, ikke i prod?

msolli08:09:42

Jo, det første punktet gjelder i prod også. Jeg setter (s/check-asserts true)(kunne også gjort det med en Java system property), og har mange funksjoner med {:pre [(s/assert ::en-eller-annen-spec et-argument-til-funksjonen)]} . Så det feiler i produksjon hvis input er feil. Men det gjør det jo ikke, for jeg har tester! 🙂 Joda, det hender det feiler, men det er fordi jeg ikke har forutsett et eller annet. Da skriver jeg en test, fikser koden som kaller den aktuelle funksjonen, og går videre.

hkjels09:09:22

Ahh. Det var mitt neste spørsmål egentlig, om du gjorde dette via :pre ☺️

msolli10:09:08

Det fins noen (assert (s/valid? ::en-eller-annen-spec et-argument) "En forklaring") rundt forbi også. Den praktiske forskjellen er vel bare hvordan man eventuelt skrur av/på kastingen av exceptions.

hkjels10:09:33

Jeg baserte et ui-bibliotek på spec en gang i tiden. Var også veldig fornøyd med bruken av det på den måten, men mener å huske at det ble litt performance problemer. https://github.com/bdo-labs/ui

hkjels10:09:29

trenger litt kjærlighet for å kunne kjøre det repoet nå tror jeg 🙂

msolli08:09:39

Har require-et [clojure.spec.alpha :as s]179 steder i koden min pr. nå.

augustl13:09:21

random: husker jeg ble imponert av software transactional memory og “agents” i en demo Rich Hickey, før jeg lærte meg Clojure. Det brukte jeg ikke så mye, gitt 😄

😄 1
teodorlu14:09:53

av verktøy for concurrency i Clojure har jeg brukt: 1. Immutable data 2. Atoms 3. Ekstern database. Føler at jeg er i samme båt ...