If it wasn't abundantly clear yet, I'm a Racket noob, so when I had this
kind of thing in my code:

(define x 'a)
(case x
  (('a) return-something)
  (('b) return-something-else)
  (('c) return-yet-another-thing))

  I was baffled to find out that the case form always returned void (thanks
I made this mistake a few times in the past: quoting symbols in case forms.
I'm human, humans make errors, and I make a LOT of errors.
  I wrote the case form out of habit. I quoted symbols out of habit. I
didn't test the proc in the REPL, because well, I was quite sure how case
worked. The same habit pushed me to write a test. But I thought... bah this
is just too simple, why bother? Yet I should have, because it would have
instantly showed me that my expectations were off.

(module+ test
  (require rackunit))
(define (bad-case x)
  (case x
    (('a) return-something)
    (('b) return-something-else)
    (('c) return-yet-another-thing)))
; unit test
(module+ test
  (check-equal? (bad-case 'b) 'b))
; test fails, bad-case returns void.

Obviously the correct syntax is:

(case x
    ((a) return-something)
    ((b) return-something-else)
    ((c) return-yet-another-thing))

  That very basic mistake made me spend quite a few hours tracking where
that void was coming from. And when that void pipes through a few functions
before landing in a find-files predicate, and that the error doesn't quite
mentions which parameter it came from...

  I read somewhere, that we should use plenty of asserts in our code. I
usually have unit tests for most of my functions, except on the ones I find
trivial. Silly mistake.
  So uh.. if you're a noob like me, write lots of tests. Test your
functions in the REPL. We say 'there's no such thing as a stupid question'.
I say, there's no such thing as a stupid test. Best of all, tests are free
with Racket!


You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 

Reply via email to