猿问

这个 Go 代码可以重构吗?

只使用 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....

        }

    }


明月笑刀无情
浏览 177回答 2
2回答

富国沪深

我不知道你会如何重构代码,并以某种方式保持足够清晰和富有表现力。如果您只需要考虑三种情况,将它们分成三个单独的 if/else 是对这些情况进行编码的最简单方法。

哔哔one

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

相关分类

Go
我要回答