如果今天我們有很多情形需要判定,除了可以使用 else if 敘述外,還可以使用 switch 敘述來讓程式碼更精簡好閱讀些,先來看看他是怎麼寫的。
switch <起始賦值敘述>; <運算式> {
case <運算式>:
<執行的程式碼>
case <運算式>,<運算式>:
<執行的程式碼>
fallthrough
...
default:
<執行的程式碼>
}
補充:
if 敘述只能用布林值運算式,也就是只能是 true 或 false,但 switch 敘述裡面就可以放其他運算式,也可以回傳其他不只是布林值。
以上語法有些新看到的我們一一來解釋!
<起始賦值敘述>
與 <運算式>
不一定都要寫,可以二擇一,當然也可以兩者都不寫(不寫的時候就等於 switch true
)。讓我們直接改良範例 3 來看看一樣的範例,用 switch 寫起來是如何吧!
範例 5:
package main
import "fmt"
const lotteryNumber int = 4516282935
const SecondPrizeNumber int = 4516282934
func main(){
myLotteryNumber := 4516282935
switch myLotteryNumber {
case lotteryNumber:
fmt.Println("環遊世界")
case SecondPrizeNumber:
fmt.Println("買房子!")
default:
fmt.Println("繼續努力上班吧QQ")
}
}
範例 5(執行結果):
環遊世界
比對一下範例 3 跟 5 ,改用 switch 是不是程式碼精簡許多呢!? 接下來我們持續改良,看看 switch 可以用的變化吧。
範例 6:
package main
import "fmt"
const lotteryNumber int = 4516282935
const SecondPrizeNumber int = 4516282934
func main(){
myLotteryNumber := 4516282935
switch myLotteryNumber {
case lotteryNumber,SecondPrizeNumber: // case 後面接多個運算式比對 switch
fmt.Println("恭喜中獎!!")
default:
fmt.Println("沒有中獎,繼續努力上班吧QQ")
}
}
範例 6(執行結果):
恭喜中獎!!
範例 7:
package main
import "fmt"
const lotteryNumber int = 4516282935
const SecondPrizeNumber int = 4516282934
func main(){
switch myLotteryNumber := 4516282935 { // 連上面的宣告都可以直接變成 switch 的起始賦值
case myLotteryNumber==lotteryNumber || myLotteryNumber==SecondPrizeNumber:
fmt.Println("恭喜中獎!!")
default:
fmt.Println("沒有中獎,繼續努力上班吧QQ")
}
}
範例 7(執行結果):
syntax error: cannot use myLotteryNumber := 4516282935 as value
這邊我在製作範例的時候,剛好噴錯了,因為閱讀錯誤訊息也是很好學習的時候,所以特別放上來大家一起除錯,仔細閱讀錯誤訊息,他是在說我少了符號,於是逐行檢視程式碼,發現我這是一個只有起始賦值敘述的 switch 敘述,再看看上面的範例程式碼,起始賦值敘述跟運算式中間是要用 ; 分隔的,原來我是忘了標點符號啦!加上之後正確的程式碼如下:
範例 8:
package main
import "fmt"
const lotteryNumber int = 4516282935
const SecondPrizeNumber int = 4516282934
func main(){
switch myLotteryNumber := 4516282935; {
case myLotteryNumber==lotteryNumber || myLotteryNumber==SecondPrizeNumber:
fmt.Println("恭喜中獎!!")
default:
fmt.Println("沒有中獎,繼續努力上班吧QQ")
}
}
範例 8(執行結果):
恭喜中獎!!
在今天的鐵人賽,我們學習到在 Go 語言中 switch...case ,再加上昨天的 if ... else ,就是完整的條件判斷,我個人的使用習慣是,若是有很多邏輯需要判定的,我會使用 switch...case 讓 程式碼更加簡潔 ,若是少少的 true.false 判定,我則會選擇更加 直觀 的 if ... else ,不過怎麼使用還是依照個人喜好:)。
那明天繼續介紹在 Go 語言中迴圈的使用,明天見~~~