Когда один лучше другого? Один быстрее, чем другой, или единственная разница - это возврат false или nil?
Когда использовать "if" и "when" в Clojure?
Ответ 1
Используйте if, когда у вас есть только один вариант правды и один фальшивый случай, и вам не нужен неявный блок do. Напротив, when следует использовать, когда вам нужно только обрабатывать правдивый случай и неявный do. Нет никакой разницы в скорости, это вопрос использования самого идиоматического стиля.
(if (my-predicate? my-data)
(do-something my-data)
(do-something-else my-data))
(when (my-predicate? my-data)
(do-something my-data)
(do-something-additionally my-data))
В случае if будет выполняться только do-something, если my-predicate? возвращает правдивый результат, тогда как в случае when выполняются как do-something, так и do-something-additionally.
Ответ 2
Используйте if, когда у вас есть два разных выражения: для предложения true и для предложения false.
when и when-not полезны в двух случаях:
- если вы хотите выполнить одно или несколько (неявные
doздесь) нечистые операции условно; - когда вы хотите что-то оценить, когда некоторый предикат оценивает
true(илиfalseв случаеwhen-not) и возвращаетnilв противоположном случае.
Единственная разница - это возврат false или nil
Нет существенной разницы между false и nil, поскольку оба оценивают до false в логическом контексте.