这样的多层if else有没有更好的写法?

yuantiancai · 2019-04-12 05:23:17 · 1950 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-04-12 05:23:17 的主题,其中的信息可能已经有所发展或是发生改变。

if a {
    if b {
        if c {
            if d {
                return true
            } else {
                return false
            }
        } else {
            return false
        }
    } else {
        return false
    }
} else {
    return false
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1950 次点击  
加入收藏 微博
20 回复  |  直到 2019-04-18 11:23:08
Tomuchy
Tomuchy · #1 · 6年之前

如果仅仅简化例子的逻辑 那下面就可以满足了 '''if d { return true } else { return false }''' 不过你应该不是想要这个,但是有一点无法确定,是每个条件返回值都不同吗? 大概写一下 我平时遇到这种的写法 不一定是最好的 逻辑 就是 先写小范围的判断 再写大范围的条件 ''' if d{ return xxx } if c{ return x1 } if b{ return x2 } ''' ------- 类似这种形式

还有一种就是 如果是取交集的情况 那就这样 ''' if a&&b { return x1 } if b&&c { return x2 }

想多层判断的话 要根据实际情况去写 个人感觉层数能少则少 要不然后续自己看这些代码都想去si

希望能对你有所帮助!

songlq
songlq · #2 · 6年之前

if a &&b &&c{ return true }

yuantiancai
yuantiancai · #3 · 6年之前
TomuchyTomuchy #1 回复

如果仅仅简化例子的逻辑 那下面就可以满足了 '''if d { return true } else { return false }''' 不过你应该不是想要这个,但是有一点无法确定,是每个条件返回值都不同吗? 大概写一下 我平时遇到这种的写法 不一定是最好的 逻辑 就是 先写小范围的判断 再写大范围的条件 ''' if d{ return xxx } if c{ return x1 } if b{ return x2 } ''' ------- 类似这种形式 还有一种就是 如果是取交集的情况 那就这样 ''' if a&&b { return x1 } if b&&c { return x2 } 想多层判断的话 要根据实际情况去写 个人感觉层数能少则少 要不然后续自己看这些代码都想去si 希望能对你有所帮助!

多谢回复,abcd必须每一个都为true才返回true,如果有简洁写法else也可以去掉只返回一个false

yuantiancai
yuantiancai · #4 · 6年之前
songlqsonglq #2 回复

if a &&b &&c{ return true }

我也是这样写了发现不对,如果其中两个为false,最后也是true,需要每个都为true

jarlyyn
jarlyyn · #5 · 6年之前
yuantiancaiyuantiancai #3 回复

#1楼 @Tomuchy 多谢回复,abcd必须每一个都为true才返回true,如果有简洁写法else也可以去掉只返回一个false

想了下,你是想要

return a && b && c && d

?

machzh73
machzh73 · #6 · 6年之前

了解一下设计模式吧,可以有效减少这种方式

yuantiancai
yuantiancai · #7 · 6年之前
jarlyynjarlyyn #5 回复

#3楼 @yuantiancai 想了下,你是想要 return a && b && c && d ?

return true

yuantiancai
yuantiancai · #8 · 6年之前
machzh73machzh73 #6 回复

了解一下设计模式吧,可以有效减少这种方式

多谢指点

machzh73
machzh73 · #9 · 6年之前

客气了

jarlyyn
jarlyyn · #10 · 6年之前
yuantiancaiyuantiancai #7 回复

#5楼 @jarlyyn return true

??????

你的需求是不是当 a,b,c,d四个条件都为true时返回true?

也就是判断是否a ,b , c ,d都成立?

是的话这一句就可以了啊…………

yuantiancai
yuantiancai · #11 · 6年之前
jarlyynjarlyyn #10 回复

#7楼 @yuantiancai ?????? 你的需求是不是当 a,b,c,d四个条件都为true时返回true? 也就是判断是否a ,b , c ,d都成立? 是的话这一句就可以了啊…………

如果abcd其中俩为false,最后也是true

welcome_home
welcome_home · #12 · 6年之前

我以前遇到3个有序嵌套的, 类似于以下的方式,感觉还能接受。

if !a{
    return false
}
if !b{
    return false
}
if !c{
    return false
}
if !d{
    return false
}
return true
yuantiancai
yuantiancai · #13 · 6年之前
welcome_homewelcome_home #12 回复

我以前遇到3个有序嵌套的, 类似于以下的方式,感觉还能接受。 if !a{ return false } if !b{ return false } if !c{ return false } if !d{ return false } return true

确实要好点

jarlyyn
jarlyyn · #14 · 6年之前
yuantiancaiyuantiancai #11 回复

#10楼 @jarlyyn 如果abcd其中俩为false,最后也是true

你是要实现

如果abcd其中俩为false,最后也是true 

这个功能?

yuantiancai
yuantiancai · #15 · 6年之前
jarlyynjarlyyn #14 回复

#11楼 @yuantiancai 你是要实现 如果abcd其中俩为false,最后也是true 这个功能?

不是,是每个都为true

jarlyyn
jarlyyn · #16 · 6年之前
yuantiancaiyuantiancai #15 回复

#14楼 @jarlyyn 不是,是每个都为true

那我给你的就是最标准的做法啊

不存在 如果abcd其中俩为false,最后也是true

不然就是发现go语言的惊天大bug了

jarlyyn
jarlyyn · #17 · 6年之前

https://play.golang.com/p/QyQ2FQDd40u

package main

import (
        "fmt"
)

func main() {
fmt.Println(true && false && false && true)
fmt.Println(true && false && true  && false)
fmt.Println(true && true && false  && false)    
fmt.Println(false && false && true  && true)    
fmt.Println(false && true  &&  false &&true)    
fmt.Println(false  && true  && true && false)    
fmt.Println(true  && true  && true && true)    
}

false

false

false

false

false

false

true

yuantiancai
yuantiancai · #18 · 6年之前
jarlyynjarlyyn #17 回复

https://play.golang.com/p/QyQ2FQDd40u package main import ( "fmt" ) func main() { fmt.Println(true && false && false && true) fmt.Println(true && false && true && false) fmt.Println(true && true && false && false) fmt.Println(false && false && true && true) fmt.Println(false && true && false &&true) fmt.Println(false && true && true && false) fmt.Println(true && true && true && true) } false false false false false false true

我理解错了,多谢指点!

igufei
igufei · #19 · 6年之前

我是绝对不能忍受if 里来套一层 if

xiaobaiskill
xiaobaiskill · #20 · 6年之前

这样不是更好

if a && b && c && d {
    return true
}

return false
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传