【よくあるバグの例】プログラミングの基本ルール 「反復」の反復条件間違い

【よくあるバグの例】プログラミングの基本ルール 「反復」の反復条件間違い

こんにちは!
フリーランスエンジニアのかたやまです。

今回は、プログラミングの基本ルール「反復」のよくあるバグ(前編)を解説します。

バグを学ぶべき理由

よくあるバグを知っておくとプログラミングの間違いに気づきやすくなり、プログラムがうまく動かない原因の特定に役立ちます。

プログラミングをしているとき、バグの原因調査に丸一日かかることもあります。「作る」ための技術ももちろん大切ですが、「直す」ための技術も同じように大切です。

今回の「反復」では、前半と後半にわけて2つも間違いパターンを解説します。どちらも重要なので理解しておいてください。

よくある反復条件間違い

反復処理では、反復条件が間違っていることが原因でバグになっていることがよくあります。2つの例で見ていきましょう!反復は常に、「なにを繰り返すのか」と「いつまで繰り返すのか」の2つを考えます。

1.数学のテスト勉強

バグ

数学の問題を出してくれる勉強アプリが、「円の面積」の問題を出してくれない
※テスト範囲は、「確率」「1次関数」「円の面積」の3つの分野

原因

原因を調査すると、勉強アプリが以下のように設定されていました。

【なにを繰り返すのか】①確率の問題を3問出題する → ②1次関数の問題を3問出題する
【いつまで繰り返すのか】3時間経過するまで

この例では【なにを繰り返すのか】の条件が間違っています。「面の面積」の問題の出題が設定されていません。反復して勉強を行うことはとても大切ですが、反復する対象に過不足があったら、本番のテストで困ることになります。

原因とセットで見ると簡単なことに聞こえると思いますが、実際のプログラミングはバグの情報だけで原因を調査しなければなりません。次の例では、バグの情報を見て原因を想像してみてください。

2.りんごを移動させる

バグ

かごAのりんご150個をすべて、かごBに移動する予定だったけど、かごAにりんごが50個余っている

原因

原因を調査すると、りんごを移動させるロボットが以下のように設定されていました。

【なにを繰り返すのか】①かごAからりんごを1つ手にとる → ②かごBに入れる
【いつまで繰り返すのか】100回繰り返す

この例では【いつまで繰り返すのか】の条件が間違っています。りんごは150個あるのに100回しか繰り返していないため、りんごがかごAに50個余っています。では、【いつまで繰り返すのか】になにを設定すれば良いでしょうか?答えは2種類あります。

  1. 150回繰り返す
  2. かごAのりんごが無くなるまで

どちらも正解なのですが、理想の答えはの方です。理由は、は150個のりんごにしか対応できないのに対して、は何個のりんごでも対応できるからです。目的を達成するだけでなく、より便利に使えるように開発することもプログラミングでは大切です。

まとめ

今回の「反復のよくあるバグを学ぼう」は以上です。紹介した例では物足りなさがあったかもしれませんが、まず理解しておくことが大切です。

実際のプログラミングは手順が何百~何万とあったり、順次処理や分岐処理が複雑に組み合わされたりすることがほとんどです。その場合でも「反復条件が間違っていないかな?」と考えることができれば、問題解決に役立つと思います。

では、また次回!

プログラミングを学ぶカテゴリの最新記事