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

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

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?
需要 登录 后方可回复, 如果你还没有账号请 注册新账号