• ベストアンサー

無限ループとループ文

プログラミングにおいて while文、for文、foreach文などループ文は種類がありますが 無限ループに繋がってしまう恐れが高い順などは存在しますか? どのループ文もミスなく慎重に 正確な書き方さえしていれば無限ループは起きないと思いますが もしそのような順が存在するのであれば、わからないので教えて頂きたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.3

無限ループになる恐れが高い順ですか。 その3つだと while が一番危険ですかね。 条件式が真の間ループする処理なので、処理の中で条件が変わるような処理が無ければ抜け出せなくなったり、条件変化に外部要因があると条件変化が発生せず無限ループに陥るので危険だと思います。 for は回数を指定してループ処理をするので基本的には無限ループを起こさないはずですが、処理の中でカウント用の変数を書き換えてしまったりすると無限ループに陥る可能性があります。 foreach は配列を順番に取り出して処理するループなので、こちらも for 文同様基本的には無限ループを起こさないはずですが、処理の中で元の配列にデータを追加するような処理を入れてしまうと無限ループになる可能性がありますが、元の配列にデータを追加するような処理を普通は書かないと思うので、一番可能性が低いんじゃないでしょうか。

kirawaremono_
質問者

補足

回答ありがとう御座います!

その他の回答 (2)

  • mimazoku_2
  • ベストアンサー率20% (1905/9108)
回答No.2

簡単に言えばGOTOを使って飛ばすプログラミングが一番危険。 GOSUBは戻り値を持っているが、GOTOには無いからね。 >while文、for文、foreach文 これらは、ループ条件を設定しなければ、ループしない。 (foreach文については知らない) あと、古い話だが、90年代前半にプログラムはGOTOレスで記述しましょうというのが一般PCユーザーにも広まっていたよ。 そうそう、肝心な部分が抜けたね。 プログラミングで気をつけなければならないのが、サブルーチンからサブルーチンを参照するケース。 この場合、戻り値が無効化されると、プログラムの停止(フリーズ状態)や変数を参照した際に、条件が成立せず延々と参照を繰り返すと無限ループに陥ります。 プログラミングはこういう部分に注意して組む必要がありますね。

kirawaremono_
質問者

お礼

回答ありがとう御座います!

kirawaremono_
質問者

補足

回答ありがとう御座います!

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

無限ループに陥るのは、そういうループ文そのものじゃ なく、ループ文に使っている変数をループ内で間違って いじってしまう・・・という場合が多いです。 なので、どの文という話じゃなく、内部に組み込んだ 「使いまわしのロジック」をまず疑うのが常道でしょうね。 サブルーチンなどで、局所変数の設定ミスなんて場合も ありますし。 まあ、Do~WhileのLoopOut条件を設定してないとか、 設定した条件の変数を間違っているなんて言う「凡ミス」 だってありますけど・・・。

kirawaremono_
質問者

補足

回答ありがとう御座います!

関連するQ&A