Я думаю, if-let следует использовать, если вы хотите сослаться на значение условия if
в части кода "then
":
т.е. вместо
(let [result :foo]
(if result
(do-something-with result)
(do-something-else)))
Вы пишете:
(if-let [result :foo]
(do-something-with result)
(do-something-else))
, который немного аккуратнее, и спасает вас от отступа на следующем уровне. Что касается эффективности, вы можете видеть, что расширение макроса не добавляет больших накладных расходов:
(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)))
Это также показывает, что на привязку нельзя ссылаться в части кода "else
".