05-控制結構‎ > ‎

05.02-If

If

讓我們來修改之前寫的程式,改為在每行印出數字 1 到 10,並指出該數字是奇數(odd)或偶數(even),像是這樣:

1 odd
2 even
3 odd
4 even
5 odd
6 even
7 odd
8 even
9 odd
10 even

首先,我們需要一種方法來定義數字是奇數還是偶數,一個簡單的方式是將這個數字除以 2,如果餘數是 0,則為偶數;否則就是奇數。因此我們如何用 Go 找出除法的餘數呢?我們會用 % 運算符,1 % 2 等於 12 % 2 等於 0、 3 % 2 等於 1 諸如此類。

接著我們需要一種方法,可以透過條件選擇不同的事物,我們可以用 if statement:

if i % 2 == 0 {
  // even
} else {
  // odd
}

if statement 類似 for statement,裡頭會有一個條件判斷式,並接著一個程式區塊。If statements 也有一個選配的 else。如果條件判斷式為 true,那麼會執行條件判斷式後面的程式碼,否則會跳過該程式碼區塊。若有 else 的話,則會執行 else 後面的程式碼區塊。

If statements 也可以有 else if

if i % 2 == 0 {
    // divisible by 2
} else if i % 3 == 0 {
    // divisible by 3
} else if i % 4 == 0 {
    // divisible by 4
}

條件判斷式是由上而下進行檢查的,若第一個結果為真,則會執行相對應的程式碼區塊,而其它的區塊則都不會執行,即使那些區塊的條件判斷式也會成立。(比如:4 跟 2 都可以整除 8,但是 // divisible by 4 這個區塊絕對不會執行,原因是會先執行 // divisible by 2

將這些串在一起,我們會得到:

func main() {
    for i := 1; i <= 10; i++ {
       if i % 2 == 0 {
            fmt.Println(i, "even")
        } else {
            fmt.Println(i, "odd")
        }
    }
}

我們從新看一次這整個程式:

  • 建立一個型別為 int 的變數 i,並給定一個值 1

  • i 是否小於或等於 10 呢?是的:進入該程式碼區塊。

  • i ÷ 2 的餘數是否等於 0 呢?否:進入 else 程式碼區塊。

  • 在 i 後面印出 odd

  • 加上 i (在條件式之後的 statement)

  • i 是否小於或等於 10 呢?是的:進入該程式區塊。

  • i ÷ 2 的餘數是否等於 0 呢?是的:進入 if 程式碼區塊。

  • 在 i 後面印出 even


餘數運算符,國小畢業之後就很少看到了,結果在程式設計時真的很有幫助,你從 zebra striping tables 到 partitioning data sets 裡到處都可以看到它。

Comments