Когда один лучше другого? Один быстрее, чем другой, или единственная разница - это возврат 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
в логическом контексте.