こんにちは!
フリーランスエンジニアのかたやまです。
今回は、プログラミングの基本ルール「反復」のよくあるバグ(後編)を解説します。
前編はこちら
よくある無限ループ
反復処理では、気づかないうちに無限ループになっていることが原因でバグになっていることがよくあります(意図した無限ループはもちろんOK)。2つの例で見ていきましょう!反復は常に、「なにを繰り返すのか」と「いつまで繰り返すのか」の2つを考えます。
1.みかんを移動させる
バグ
かごAのみかんが無くならない!
原因
原因を調査すると、みかんを移動させるロボットが以下のように設定されていました。
【なにを繰り返すのか】①かごAからみかんを1つ手にとる → ②かごBに入れる → ③かごBからみかんを1つ手にとる → ④かごAに入れる
【いつまで繰り返すのか】かごAのみかんが無くなるまで
この例では【なにを繰り返すのか】の条件が間違っています。①②でせっかくみかんをかごBに移動させたのに、③④でかごAに戻しています。これでは【いつまで繰り返すのか】に設定された条件の「かごAのみかんが無くなるまで」は永遠に達成することができません。
原因とセットで見ると簡単なことに聞こえると思いますが、実際のプログラミングはバグの情報だけで原因を調査しなければなりません。次の例では、バグの情報を見て原因を想像してみてください。
2.英語のテスト勉強
バグ
英語の問題を出してくれる勉強アプリが終わらない!
原因
原因を調査すると、勉強アプリが以下のように設定されていました。
【なにを繰り返すのか】①例題を5問出題して勉強してもらう → ②100点満点の確認テストを解いてもらう
【いつまで繰り返すのか】確認テスト120点取れるまで
この例では【いつまで繰り返すのか】の条件が間違っています。100点満点の確認テストなのに「120点取れるまで」という条件になっているため、終わりがありません。【いつまで繰り返すのか】が達成不可能な条件になっていないかも要注意です。
まとめ
今回の「反復のよくあるバグを学ぼう」は以上です。前編、後編と分けて解説しましたが、いかがだったでしょうか?
実際のプログラミングは手順が何百~何万とあったり、順次処理や分岐処理が複雑に組み合わされたりすることがほとんどです。その場合でも「無限ループになっていないかな?」と考えることができれば、問題解決に役立つと思います。
では、また次回!