首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >去掉if语句

去掉if语句
EN

Stack Overflow用户
提问于 2018-06-27 00:47:55
回答 2查看 83关注 0票数 0

在代码中,我遇到了这样的情况:

代码语言:javascript
复制
if (a && b || c && d || e && f || g && h){
    // do something
}

如下所示:

代码语言:javascript
复制
if len(env.workers) == 0 && env.minQueue.Len() == 0 || len(env.workers) == len(env.daemonList) && env.minQueue.Len() == 0 || len(env.workers) > 0 && len(env.workers) == len(env.daemonList) {
        env.shouldStop = true
        return nil
    }

但是很难调试和查找错误。有没有办法用更友好的结构来代替这样的语句呢?

EN

回答 2

Stack Overflow用户

发布于 2018-06-27 00:53:44

您多次使用len(env.daemonList)len(env.workers)env.minQueue.Len()。将它们存储在变量中不仅可以缩短长条件,还可以为您提供调试时可以引用的变量。

你可以把它写成:

代码语言:javascript
复制
w_len = len(env.workers)
d_len = len(env.daemonList)
q_len = env.minQueue.Len()

if w_len == 0 && q_len == 0 || w_len == d_len && q_len == 0 || w_len > 0 && w_len == d_len {...

现在,当然这里的问题是,尽管名称较短,但名称并不具有描述性。你可以以冗长为代价给他们起更好的名字。你想在每个方向上倾斜多少是一个品味和背景的问题。

这也不会像标题所说的那样“摆脱”if,但这并不总是一个很好的目标。if不一定不好。

票数 1
EN

Stack Overflow用户

发布于 2018-06-27 01:14:54

正如@Eugene提到的,将这样的长表达式分解成多个较小的表达式总是一个好主意。

代码语言:javascript
复制
exp1 = a && b
exp2 = c && d
exp3 = exp1 || exp2
exp4 = e && f
exp5 = g && h
exp6 = exp4 || exp5
exp7 = exp3 || exp6

if(exp7){
   //doSomething
}

这在一开始可能看起来很荒谬,但相信我,它还有很长的路要走,在任何时候,你都可以回到上面的代码中,很容易理解那里是怎么回事。事实上,如果您喜欢使用调试器,那么这样做会让您的工作更轻松。

同样在性能方面,你所做的就是生成额外的7个布尔变量。当考虑到代码的可读性时,这是微不足道的。为了提高代码的可读性,经验法则是将变量命名为正确的,而不是exp1,2,...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51047905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档