为了账号安全,请及时绑定邮箱和手机立即绑定

这个 Go 代码可以重构吗?

这个 Go 代码可以重构吗?

Go
明月笑刀无情 2021-08-16 18:28:49
只使用 1 个“if”语句,没有“else”,没有开关,也没有 if-else 的速记符号?    // Original function    func Wheel(WheelPos uint32) {        if WheelPos < 85 {            fmt.Println("WheelPos < 85",Color(WheelPos*3, 255-WheelPos*3, 0))        } else if WheelPos < 170 {            WheelPos -= 85            fmt.Println("WheelPos >= 85",Color(0, WheelPos*3, 255-WheelPos*3))        } else {            WheelPos -= 170            fmt.Println("WheelPos > 170",Color(0, 255-WheelPos*3, WheelPos*3))        }    }上面的函数在 for 循环中的 main 中被调用,如下所示:    func main() {        var i uint32        for i = 0; i < 255; i++ {            Wheel(i)        }    }颜色函数定义如下:    func Color(r uint32, g uint32, b uint32) uint32 {        return (r << 16) | (g << 8) | b    }我已经开始了这样的事情:    func Wheel(WheelPos uint32) {        if (WheelPos < 85) || (WheelPos >= 85) || (WheelPos > 170) {         // logic....        }    }
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

我不知道你会如何重构代码,并以某种方式保持足够清晰和富有表现力。

如果您只需要考虑三种情况,将它们分成三个单独的 if/else 是对这些情况进行编码的最简单方法。


查看完整回答
反对 回复 2021-08-16
?
哔哔one

TA贡献1854条经验 获得超8个赞

这在技术上是可行的:您可以为>170案例创建一个 if 语句,然后定义一个包含 170 个函数指针的数组,并对其他两个案例使用索引操作。我想不出一个合理的情况,即此解决方案实际上比您已有的解决方案更好。


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信