Go 程式設計教學:控制流程 - 選擇

到目前為止,我們的程式都是依序執行;在程式中加入控制結構 (control structure) 後,程式就可以依條件決定是否要執行某區塊的程式碼,也可以重覆多次執行同區塊的程式碼,這時候,程式好像變聰明了。

控制結構分為兩種,分別是:

  • 選擇 (selection):選擇性執行
  • 迭代 (iteration):重覆執行

在本文中,我們會介紹 Go 之中和選擇控制結構。

if

條件控制的作用在判斷程式的狀態,符合特定條件時,才執行該區塊內的程式碼,使得程式可以依不同狀態改變其行為。if 在英文中原本就是「如果」的意思,大部分的程式語言都用這個字當關鍵字,Go 也不例外。

如果我們用 Go 虛擬碼 (pseudocode) 表示如下:

if condition {
    statement
}

以下是實例:

除了單一的 if 外,還可以加入 else 區塊, 將其寫成虛擬碼如下:

if condition {
    statement
} else {
    statement
}

以下是實例:

另外,還可以加入一個或以上的 else if 區塊,將其寫成虛擬碼如下:

if condition {
    statement
} else if condition {
    statement
} else {
    statement
}

以下是實例:

在使用多個 if 敘述時,若滿足了某一個條件,程式即會進入該條件所在的區塊,執行該區塊的程式碼,接著跳出。要注意這個特性,以免寫出語法對,但邏輯錯的程式。以下是一個複合 if 敘述的實例:

switch

Go 提供 switch 做為另一個條件判斷的語法。基本上,switch 可視為一種語法糖 (syntactic sugar),因為所有的 switch 語法都可以用等效的 if 語法來代替,但適當地使用 switch 會使得程式碼比較簡潔,而 C 家族的程式語言都保留 switch 這個語法,所以 Go 也就將 switch 保留下來。

以下程式判斷該程式執行當下所用的系統:

在上例中,default 的意思是如果不符合其他選項,就使用這個選項,類似 else 敘述,不是必需的。如同 if 般,Go 的 switch 也是由上而下依序執行。見以下實例:

在 C 語言中,switch 有一個易引起錯誤的 switch「特性」叫 fallthrough,簡單的說,這是因為忘了在 case 區塊尾端加入 break 敘述,執行到另一個 case 區塊的程式碼所引發的錯誤。在 Go 裡面,為了預防這個錯誤,預設取消這個特性,如果程式設計者需要這個特性,需明確加上 fallthrough 敘述。見以下實例:

switch 也可以不加變數,這時候,switch 就像是另一個 if。見以下實例:

在這種情形下,使用 if 或是 switch 僅是個人偏好。

在本文中,我們介紹 ifswitch 兩種條件控制的語法,建議讀者可以試著將本文的範例分別以 if 和 switch 改寫,就可以體會在什麼情形下使用何種語法較合適。在下一篇文章中,我們會介紹迴圈。