When to use let vs. if-let in Clojure
clojure
Solution
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.
Problem
When does using `if-let` rather than `let` make code look better and does it have any performance impact?