はじめに
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 文の代わりに使用できます。
以上、おわり。