I want to write a function that would return the boolean true if the given collection is not empty and false otherwise.
I could either do
defn ..
(boolean (seq coll))
or
defn ..
(not (empty? coll))
As I am new to clojure I was initially inclined to go with #2 (more readable), but the clojure api reference for empty? explicitly says use the idiom (seq coll) instead of (not (empty? coll)), maybe to avoid double negation.
I want to know what is the clojure way to check if a collection is non-empty and return a boolean true/false.
The passage from
empty?‘s docstring which you mentioned means in particular that such anonempty?function should never be necessary, or even particularly useful, becauseseqcan always stand in for it in Boolean contexts, which in pure Clojure code it can.If you feel compelled to write such a function nonetheless, I’ll say that I like the first approach better.
empty?is built onseqanyway, so there’s no avoiding calling it; just casting the result to Boolean seems cleaner than two trips throughnot. For other options, see e.g.nil?,false?(I still prefer the cast).Incidentally, why do you want to write this…? For calling a Java method with a
booleanargument perhaps? In that case, I think the cast would express the intention nicely.Update: An example to illustrate the latter point:
A simple Java class:
Some Clojure client code: