LoginSignup
50
34

More than 5 years have passed since last update.

Go入門 vol.3 〜Go言語の基本文法(if、for、switch)〜

Posted at

はじめに

Go 言語に入門します。第 3 回目になります。
今日もひたすら写経です。

教材などについての説明は、
下記リンクの中の Go 入門の vol.1 をご参照くださいね。

Go入門リンク

学習内容

今回は、前回に引き続き

Go言語の基本文法(if、for、switch)

について、簡単にまとめていきたいと思います。

Go言語の基本文法

if

Go では、if 文の条件部に丸括弧は必要ありません。

func main() {
    a, b := 10, 100
    if a > b {
        fmt.Println("a is larger than b")
    } else if a < b {
        fmt.Println("a is smaller than b")
    } else {
        fmt.Println("a equals b")
    }
    // 1行による波カッコ省略不可!
    // 三項演算子もなし!
}

言語によっては、if 文の処理が 1 行の場合に波括弧を省略できる場合がありますが、
Go ではそうした省略はコンパイルエラーになります。

また、三項演算子はありません。if/else 文を使用します。

for

Go の for 文では、C や Java では必要な条件部の丸括弧が必要ありません。

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    // While文もなし!
    // すべてfor文でかくべし!
}

Go で繰り返しを表現する方法は for 文のみです。

ほかの言語における while 文や do/while 文、loop 文といったような表現は、
すべて for 文を用いて行います。

while も for で

たとえば C の while 文は、 for 文で次のように表現します。

func main() {
    // C
    //  int n = 0;
    //  while (n < 10) {
    //      printf("n = %d\n", n);
    //      n++;
    //  }

    // Go
    n := 0
    for n < 10 {
        fmt.Printf("n = %d\n", n)
        n++
    }
}

無限ループ

C の場合、 for 文を使って次のように無限ループを表現します。

func main() {
    // C
    //  for (;;) {
    //      doSomething();
    //  }

    // Go
    for {
        doSomething()
    }
    // for文の条件部を省略することで表現できる!
}

Go では、 for 文の条件部を省略することで同様の表現ができます。

break, continue

繰り返し制御には C や Java と同様に、

  • ループを終了する break
  • ループの最初から処理を再開する continue

を使用できます。

func main() {
    n := 0
    for {
        n++
        if n > 10 {
            break // ループを抜ける
        }
        if n%2 == 0 {
            continue // 偶数なら次の繰り返しに移る
        }
        fmt.Println(n) // 奇数のみ表示
    }
}

swich

if/else 文が繰り返す場合は、switch 文を用いたほうがスッキリ書ける場合があります。
Go の switch 文は非常に柔軟であり、値の比較だけでなく条件分岐にも使用できます。

値での分岐

まず、値を用いた switch 文は次のようになります。

func main() {
    n := 10
    switch n {
    case 15:
        fmt.Println("FizzBuzz")
    case 5, 10:
        fmt.Println("Buzz")
    case 3, 6, 9:
        fmt.Println("Fizz")
    default:
        fmt.Println(n)
    }
}
  • switch 文に指定した値に一致する case が実行される
  • どの case にも一致しなかった場合は default が実行される
  • case には単一の値だけでなく、カンマで区切った値も指定できる

fallthrough

C や Java などの switch 文は、 1 つの case が実行されると
その次の case に処理が移るため、単一の case の実行で終わらせたい場合に、
case ごとに break を書く必要がありました。

しかし、 Go の switch 文では、
case が 1 つ実行されると次の case に実行が移ることなく switch 文が終了するため、
break をいちいち書く必要はありません。

ただ、case の処理が終わったあとに、次の case に処理を進めたい場合もあります。
そうした場合は、case 内に fallthrough を書くことで、
明示的に次の case に処理を進めることができます。

func main() {
    n := 3
    switch n {
    case 3:
        n = n - 1
        fallthrough
    case 2:
        n = n - 1
        fallthrough
    case 1:
        n = n - 1
        fmt.Println(n) // 0
    }
}

式での分岐

Go の switch 文では、case に値だけでなく式も指定できます。

func main() {
    n := 10
    switch {
    case n%15 == 0:
        fmt.Println("FizzBuzz")
    case n%5 == 0:
        fmt.Println("Buzz")
    case n%3 == 0:
        fmt.Println("Fizz")
    default:
        fmt.Println(n)
    }
}

たとえば上記のように case に式を指定すれば、
評価結果が true になる case が実行でき、if/else 文の代わりに使用できます。

以上、おわり。

50
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
34