关于if语句:何时在Clojure中使用“ if”和“ when”?

When to use “if” and “when” in Clojure?

什么时候比另一个更好?
一个比另一个快吗?还是唯一的区别是返回false或nil?


当您只有一个真实情况和一个虚假情况并且不需要隐式的do块时,请使用if。相反,当您只需要处理真实情况和隐式do时,应使用when。速度没有区别,这是使用最惯用的风格的问题。

1
2
3
4
5
6
7
 (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情况下,如果my-predicate?返回真实结果,则仅运行do-something,而在when情况下,同时执行do-somethingdo-something-additionally


当您有两个不同的表达式时,请使用if:用于true子句和用于false子句。

whenwhen-not在两种情况下很有用:

  • 当您要有条件地执行一个或多个(隐式do帮助)有条件的纯操作时;
  • 当您要评估某些谓词为true(或false(对于when-not的情况))并在相反情况下返回nil的情况。

only difference is the return of false or nil

falsenil之间没有主要区别,因为两者在逻辑上下文中均求值为false