問3 forしかない世界で集計せよ
初段 / 目安 20分
「Node版の while と forEach で書かれた売上集計、Go に移植を」
凛さんはコードを指しながら続けます。「ご存知のとおり、Go のループは for だけです。3つの繰り返しを全部 for で」
Go には while がありません。do-while も、配列の forEach もありません。それでも困らないのは、for が3つの顔を持っているからです。
回数を決めて回すときは、見慣れた形です。
Go
for i := 0; i < 5; i++ {
}条件だけで回すときは、前後を落とします。これが while の代わりです。
Go
remaining := 3
for remaining > 0 {
remaining--
}remaining-- は1を引く書き方です。条件だけのループでは、中で条件に使う変数を更新しないと繰り返しが終わりません。逆に i++ は1を足します。total += value は total = total + value の省略形です。配列の長さは len(values)、添字での取り出しは values[i] です。
中身を順に見るときは range を添えます。添字と値の両方が取れます。
Go
for i, v := range prices {
}添字が要らなければ for _, v := range prices と書きます。逆に値が要らなければ for i := range prices です。
道具が1つしかないと、どれを使うか迷う時間が消えます。
完成条件
売上の配列を受け取り、3種類の繰り返しで集計した結果を返す関数 sumThreeWays を完成させてください。今回は条件だけの for が練習対象です。ほかの2種類は完成コードを読んで比較します。
返す形は次のとおりです。3つとも同じ合計になります。
プレーンテキスト
count=13500 while=13500 range=13500- 完成済みの
countはfor i := 0; ...の形で、添字を使って足す whileは条件だけのforで、添字を自分で進めながら足す- 完成済みの
rangeはfor _, v := rangeの形で足す
0 円が混ざっていても数え落とさないようにしてください。
要件
- 完成済みの回数指定の
forとrangeを読んで、繰り返しの条件・値の取り出し方を比べる - 未完成の集計は条件だけの
forで書く。i < len(prices)の間、prices[i]をwhileSumに足してiを1つ進める 0円の要素でも添字を進め、用意された返却処理で3つの合計を返す
ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです