Подтвердить что ты не робот

Когда использовать "if" и "when" в Clojure?

Когда один лучше другого? Один быстрее, чем другой, или единственная разница - это возврат false или nil?

4b9b3361

Ответ 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 в логическом контексте.