Go言語 基礎講座 #4 繰り返し for

f:id:shinta2000ttt:20200722180639p:plain

目次

for文

for i := 1; i <10; i++ {
    fmt.Println(i)
}

/*
1
2
3
4
5
6
7
8
9
*/

for文は基本は for 変数定義; 条件式; 変数処理{ 処理 } という書き方をします。

while文の代わり

i := 1
for i < 10{
    fmt.Println(i)
    i++
}

/*
1
2
3
4
5
6
7
8
9
*/

このようにforの後ろに条件式だけを置く書き方もできます。Goにはwhile文がないので、while文の代わりにこの書き方を使います。この場合繰り返し処理の中で変数をインクリメントするなりの処理を開く必要があります。

break・continue

i := 1
for i <= 15 {
    if i == 12 {
        break
    }
    fmt.Println(i)
    i =* 3
}

/*
1
3
6
9
*/

breakはfor文の繰り返しから抜け出すことができます。そのためbreak以後の処理は実行されません。基本的にif文などと組み合わせて、ある条件のときに繰り返しから抜けるなど処理に使われます。

i := 0
for {
    if i % 3 == 0 {
        fmt.Peintln(i)
        i++
    }else{
        i++
        continue
    }
    if i > 15 {
        break
    }
}

/*
3
6
9
12
15
18
*/

continueは繰り返し内の処理を飛ばすことが出来ます。そのためcontinue以後のその回の繰り返し内の処理は実行されず、次の回に移行します。

またGoではforは条件など何もなくてもfor { 処理 }と書くことも出来ます。その場合は上の例のように、繰り返し内の処理でインクリメント等の変数の処理と繰り返しを終了する処理を書いておく必要があります。

range

rangeは文字列や配列、スライス(データ型は後の講座で解説)などのシーケンスデータに対して繰り返し処理を行うのに便利な記法です。

str := "abcde"
for index, value := range str {
     fmt.Printf("index = %d, value = %s", index,string(value))
}

/*
index = 0, value = a
index = 1, value = b
index = 2, value = c
index = 3, value = d
index = 4, value = e
*/

for インデックス, 値 := range シーケンス { 処理 } のように書きます。繰り返し処理でインデックスと値を変数として利用できます。