When to use let vs. if-let in Clojure

I guess if-let should be used when you’d like to reference an if condition’s value in the “then” part of the code:

i.e. instead of

(let [result :foo]
  (if result
    (do-something-with result)
    (do-something-else)))

you write:

(if-let [result :foo]
  (do-something-with result)
  (do-something-else))

which is a little neater, and saves you indenting a further level. As far as efficiency goes, you can see that the macro expansion doesn’t add much overhead:

(clojure.core/let [temp__4804__auto__ :foo]
  (if temp__4804__auto__
    (clojure.core/let [result temp__4804__auto__]
      (do-something-with result))
    (do-something-else)))

This also illustrates that the binding can’t be referred to in the “else” part of the code.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)