forしかない世界
ループは1種類だけ
他の言語には、繰り返しの書き方がいくつもあります。
プレーンテキスト
for / while / do-while / foreach / repeat-untilGo にあるのは for だけです。while も do-while もありません。
減らしたのは、書き方が増えるほど「どれを使うべきか」で迷い、読む人も切り替えが要るからです。1つに絞れば、繰り返しを見たときに必ず for を探せば済みます。
基本の形
Go
for i := 0; i < 3; i++ {
fmt.Println(i)
}セミコロンで区切られた3つの部分があります。
プレーンテキスト
i := 0 最初に1回だけ実行する
i < 3 毎回ここを見て、真なら続ける
i++ 1周が終わるたびに実行する動く順番はこうなります。
プレーンテキスト
i := 0 → 条件を見る → 中身 → i++ → 条件を見る → 中身 → i++ → ...条件が偽になった時点で、中身を実行せずに抜けます。
i++ は文であって式ではない
細かいところですが、Go の i++ は値を持ちません。
Go
j := i++ // エラー
fmt.Println(i++) // エラー他の言語では i++ が値を返すため、a[i++] のような書き方ができます。短く書ける一方で、増える前の値なのか後の値なのかが読み取りにくくなります。Go はその書き方をできなくしています。
-- も同じです。そして ++i という前置きの形はありません。
商品を順に処理する
Go
prices := []int{1200, 24800, 999}
for i := 0; i < len(prices); i++ {
fmt.Println(prices[i])
}len() は長さを返す組み込みの関数です。並びの最後まで回すときによく出てきます。
添字は 0 から始まるので、条件は i < len(...) です。i <= len(...) と書くと最後に1回はみ出して、実行時に止まります。
プレーンテキスト
panic: runtime error: index out of range [3] with length 3panic は、実行中に続けられなくなったときに Go が出すものです。第5章の range を使うと、この間違いごと避けられます。
要件
- 番号は1から始める
N. 商品名の形で1行ずつ並べる- 行の区切りは
\n。最後に余分な改行を付けない - 商品が1件も無いときは空文字を返す
入出力例
numberedList(["きのこ図鑑","中古スマホ","古い辞書"]) → "1. きのこ図鑑
2. 中古スマホ
3. 古い辞書"
numberedList(["きのこ図鑑"]) → "1. きのこ図鑑"
numberedList(["A","B"]) → "1. A
2. B"ヒント
編集 ゆめさく編集部