Go言語で、if、switchを使う
ループ処理と条件分岐について学んでみた
前回は変数を学び直してみました。今度は、for文とif文をやってみたいと思います。for文、if文、switch文ってプログラミングの基本ですからね💦
公式の解説を翻訳して記載してます
for文を使う
forはGoの唯一のループ構文です。ここでは、基本的なforループの種類をいくつか紹介します。
最も基本的な型であり、単一の条件を持つ。
古典的な初期/条件/後のforループ。
条件なしのforは、ループを抜けるか、囲んでいる関数から戻るまで繰り返しループします。
ループの次の繰り返しに進むこともできる。
package main
import "fmt"
func main() {
// 1~3までのループ
i := 1
for i <= 3 {
fmt.Println(i)
i = i + 1
}
// 7~9までのループ
for j := 7; j <= 9; j++ {
fmt.Println(j)
}
// breakを使用して、ループを抜ける
for {
fmt.Println("loop")
break
}
// continueを使用して、次のループに進む
for n := 0; n <= 5; n++ {
// 偶数の場合は、次のループに進む
if n%2 == 0 {
continue
}
fmt.Println(n)
}
}
実行結果
1
2
3
7
8
9
loop
1
3
5
if文を使う
Goのifとelseを使った分岐は簡単だ。
これが基本的な例だ。
elseがなくてもif文は書ける。
このステートメントで宣言された変数は、現在の分岐とそれに続くすべての分岐で使用できます。
Goでは条件を括弧で囲む必要はないが、中括弧は必要であることに注意。
Goには3項演算子がないので、基本的な条件であっても完全なif文を使う必要がある。
package main
import "fmt"
func main() {
// 7%2は7を2で割った余りを返す
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
// 8%4は8を4で割った余りを返す
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
// ここでnumが宣言されているが、if文の外では使えない
// :=9はnum=9と同じ意味。
// if num := 9; num < 0はnumが0より小さい場合にtrueを返す
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
実行結果
7 is odd
8 is divisible by 4
9 has 1 digit
switch文を使う
Switch文は、多くの分岐にまたがる条件文を表現する。
これが基本的なスイッチだ。
同じcase文の中で複数の式を区切るにはカンマを使う。この例でも、オプションのデフォルトのcaseを使用します。
式を使わないswitchは、if/elseロジックを表現する別の方法である。ここでは、case式がどのように非定数になり得るかも示す。
型スイッチは、値の代わりに型を比較する。これを使えば、インターフェイスの値の型を知ることができる。この例では、変数tはその節に対応する型を持つ。
package main
// timeは、日付や時間を扱うための機能を提供するパッケージ
import (
"fmt"
"time"
)
func main() {
// i := 2は、i = 2と同じ
i := 2
fmt.Print("Write ", i, " as ")
// switch文は、if-elseの連続を簡潔に記述するための構文
// switch文を使って、1,2,3のいずれかに対するcaseを記述
switch i {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
}
// 1つのcaseで複数の式をカンマで区切って記述することもできる
// time.Now().Weekday()は、現在の曜日を返す
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println("It's the weekend")
default:
fmt.Println("It's a weekday")
}
// t := time.Now()は、現在の日付と時刻を取得
t := time.Now()
switch {
// t.Hour()は、現在の時刻の「時」を返す
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
// whatAmI := func(i interface{})は、関数を変数に代入
// interface{}は、任意の型の値を受け取ることができる特殊な型
whatAmI := func(i interface{}) {
switch t := i.(type) {
case bool:
fmt.Println("I'm a bool")
case int:
fmt.Println("I'm an int")
default:
fmt.Printf("Don't know type %T\n", t)
}
}
// whatAmI(true)は、関数を呼び出す
whatAmI(true)
whatAmI(1)
whatAmI("hey")
}
実行結果
Write 2 as two
It's a weekday
It's after noon
I'm a bool
I'm an int
Don't know type string
最後に
昔やってみたときは、if文、for文、switch文は得意でなかったのですが、他の言語を勉強したら、Go言語自体は文法が簡単なので、以前よりは難しく感じませんでした。学習しやすい言語と言われている理由がわかった気がします。
Discussion