2014-09-12 111 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個函數指針的數組,並對其他兩種情況使用索引操作。我想不出一個合理的情況,這個解決方案實際上比你已經擁有的更好。