Ruby 你们写程序是用 if 多,还是用 unless 多?

Catherine · 2022年03月02日 · 最后由 ecnelises 回复于 2022年05月02日 · 961 次阅读

unless 在 2 个或以上的 conditions 时,阅读和梳理让我有点头痛。相反用 if 的话,至少阅读和逻辑流畅度感觉要顺畅一些。

平时我用 unless 只有一个场景,那就是避免用

if !true 
  ...
end

此时

unless true
  ...
end

就显得很简单明了。

是单纯我自己用 unless 太少的原因,还是大伙都是和我一样?😫

我一般都反着看,不停的告诉自己,这个是反的,反的。😱

我读 unless 的逻辑的时候脑子里会自动翻译成 if !xxx

tankerwng 回复

我也是,一直告诉自己 注意啦,是反的,是反的,注意 && 或者 || ,可能需要变符号!所以感觉读的很累。

看来不是我一个人的问题了,哈哈

老实讲看 unless 的时候,脑子经常会别一下

个人经验:只有 guard 场景下才使用 unless,并且 if / unless 不混用。否则很容易有大 bug

啊?我是混用

但是用 unless 基本就是 return

类似 return unless xxx

jicheng1014 回复

表示差不多。

jicheng1014 回复

对,我说的其实也是这么个意思。我觉得要尽量避免出现下面这样子的

return if a == 1
return unless b == 2

return 如果全是 if,那么就把条件当作过滤器看。如果都是 unless,那么就相当于声明了接下来代码的执行环境

如果是 if !true 我会写成 unless true

多个条件的话还是不要用 unless 的好,很容易看错,而且可读性太差。

随便写一个你熟悉的 然后 rubocop

除非你平时说话不用“除非”

否则还是会用到 unless(除非) 的

用的比较多的规范是 (应该也是 rubocop 默认的) 如果只有一个条件unless condition优于if !condition,两个以上条件用if,比如if condition1 || condition2

我脑容量比较小,每次看到 unless 会卡壳。所以写代码会倾向于用 if !xxx ,但是 RubyMine 会自作聪明的帮我改成 unless.

记不起来写 unless

return unless xxx YYDS,其他时候基本 if

nine 回复

母语和英文还是两回事的。当然,也不排除你的英文达到母语水平。

lanzhiheng 回复

内存爆了。。

基本不用 unless

if,因为 js 没有 unless

unless 的逻辑很顺啊

  1. 干啥啥啥 除非 怎样
  2. 干啥啥啥 如果 不怎样

明显 1 逻辑更通顺吧。。。

你把 unless 理解成 Swift 里面的 guard 就对了,用来做保证否则 early exit:

return unless object.valid?
需要 登录 后方可回复, 如果你还没有账号请 注册新账号