这个Go代码可以重构吗?

时间:2014-09-12 10:25:31

标签: 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循环中调用,如下所示:

    func main() {
        var i uint32
        for i = 0; i < 255; i++ {
            Wheel(i)
        }
    }

Color函数定义如下:

    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 个答案:

答案 0 :(得分:1)

我不知道你将如何重构代码,并以某种方式保持清晰和足够表达。

如果你只考虑三个案例,那么将它们分成三个单独的if / else是编写这些案例的最简单方法。

答案 1 :(得分:0)

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