logoalt Hacker News

Clojure 1.13 adds support for checked keys

122 pointsby FelipeCortezlast Thursday at 8:51 PM24 commentsview on HN

Comments

slifintoday at 3:12 PM

This is a case I never really thought about - if the key is missing today you'll get nil as the value and since Clojure is a nil punning language it usually does sensible behaviour in your program

I know this sounds unreliable but in practise I like a language that defaults to pragmatic code paths so I don't have to stay up at night imagining a million code paths

This adds a throwing codepath which is quite drastic so I'm glad people don't build this into programs everywhere - I'd be nice to hear what the team imagine as the use case for this

Normally for correctness I'd like to see specs at the boundaries for programs and different test suites for internal behaviours

moomintoday at 3:43 PM

This is actually great, and I predict that fans of nil-punning will rapidly discover the joys of actually having errors trigger where the error was introduced rather than propagating through the program.

Any news on ClojureScript gaining the feature?

show 3 replies
hk__2today at 3:34 PM

Some explanations from https://clojure.atlassian.net/browse/CLJ-2961:

> Clojure’s idiomatic use of maps has proven valuable, but missing required keys, misspelled keys, and invalid values can lead to failures that do not connect to the actual source of the problem (e.g. NPEs) making diagnosis difficult. At the same time, Clojure lacks a simple inline mechanism for functions to document and check the keys they require and accept. Existing tools either separate those expectations from the function itself or couple data shape and data provision.

temporallobetoday at 3:49 PM

We just updated one of our projects to 1.12.5, but I might push for 1.13 as this could be very useful, although an alpha version might raise questions.

ndrtoday at 3:14 PM

Is it only me or this sounds a bit counter to clojure philosophy?

show 3 replies
exabrialtoday at 4:53 PM

I love the idea of clojure and perfect immutability, but holy crap I cannot grok the syntax. My C-trained brain explodes.

show 2 replies
thomtoday at 5:02 PM

Ah yes, the missing seventeenth way to validate function parameters.