2014-09-12 78 views
0

只使用1'if'语句而不使用'else'& no switch & if-else没有简写符号?这个Go代码可以重构吗?

// 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)) 
     } 
    } 

上述功能被称为主内的循环,像这样:

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.... 
     } 
    } 
+0

如果您正在寻找反馈代码,您可以尝试http://codereview.stackexchange.com/ – 2014-09-12 10:39:20

+0

不,不,我没在寻找代码审查。不过谢谢。我想知道如果我想到的替代方式是否可行,如果是的话,我该怎么做? – 2014-09-12 10:41:28

+0

谢谢你们。这个问题可以关闭。 – 2014-09-12 16:27:36

回答

1

我看不到你会如何重构代码,并以某种方式保持清晰和充分表达。

如果您只有三种情况需要考虑,使它们在三个独立的if/else中是编码这些情况的最简单方法。

+1

使用['switch'](http://play.golang.org/p/aKpIibzLyI)可能被认为是更清洁的,但是这个问题太过于基于观点了。 – OneOfOne 2014-09-12 12:06:27

0

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