何时在Clojure中使用"if"和"when"?

Alo*_*orz 25 if-statement clojure

什么时候比另一个更好?是一个比另一个更快还是唯一的区别是假或零的回报?

sch*_*eho 35

使用if时,你有falsy情况下,只有一个truthy和一个你并不需要一个隐含的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))
Run Code Online (Sandbox Code Playgroud)

if情况下,只有do-something将运行,如果my-predicate?收益在一个truthy结果,而when情况下,两个do-somethingdo-something-additionally执行.

  • 如果我只需要处理真实的情况,而无需隐式的“ do”,那在这种情况下会更常规怎么办? (2认同)
  • 使用`when`。`do` 部分是更喜欢 `when` 而不是 `if` 的另一个很好的理由,而不是必要的先决条件。 (2认同)

Mar*_*ark 6

使用if时,你有两种不同的表现:对true条款和false条款.

when并且when-not在两种情况下有用:

  • 当你想要do有条件地执行一个或多个(隐式帮助)非纯操作时;
  • 当你想在某些谓词评估true(或者false在某种情况下when-not)时评估某些东西,并nil以相反的情况返回.

唯一的区别是假或零的回报

有没有重大的区别false,并nil作为评估都以false在逻辑上下文.