テクノロジー

なぜ無限ループになるコードを書いてしまうのかを考える

mizuno's icon'
  • mizuno
  • 2020/02/01 05:40

プログラミングでは、「繰り返し実行する」プログラムを書くことがちょくちょくあります。このとき、注意しないと「終わることなく繰り返し実行する」プログラム、いわゆる無限ループと呼ばれるもの、になってしまうことがあります。

とくにプログラミングを学び始めたばかりだと、無限ループを書いてしまうことは結構ある、という印象です。

そこで、私がプログラミングを教えた経験の範囲(延べ人数で100人ぐらい)で、どうしてなのかを考えてみました。

まず、ループ(繰り返し)について

単純な例として「1から100までの数字を表示する」で考えてみます。

もちろん、1を表示する、2を表示する、、、100を表示する、と100回書いてもプログラムは動作しますが、それでは大変ですね。なので、ループを使ってプログラムしてみます。(コード例はPHPですが、他の言語でも大筋は同じです。)

for ( $i = 1; $i <= 100; $i++ ) {
    echo $i;
}

↑の例はforという構文を使っています。同じ処理をwhileという構文を使うと↓のようになります。

$i = 1;
while ( $i <= 100 ) {
    echo $i;
    $i++;
}

無限ループになるのはどんな時か?

無限ループになるのは、コードをループが終了するように書かなかったときです。上の「1から100までの数字を表示する」だと、

数字が100以下かどうか?

がループの終了の判定になります。コードだと $i <= 100 の部分です。ですが、実際にコードを書く上で注意する必要があるのは、

数字を1つずつ増やす

を忘れないことです。コードだと $i++ の部分です。ここを忘れてしまい、無限ループになる、というケースを多くみてきました。

whileで無限ループが起きやすい

私の経験した範囲では、whileで無限ループが起きやすいです。一方でforで無限ループになったことは、今まで見たことがありません。

無限ループになる例は、↓のコードのように、whileを使っていて、数字を1ずつ増やすコードが抜けるケースです。

$i = 1;
while ( $i <= 100 ) {
    echo $i;
    // ここの記述が抜ける
}

その理由は、おそらく↓です。

Content image

for の場合は、ループ関連の記述をまとめて書く。(水色の枠)
whileの場合は、ループ関連の記述があちこちに別れる。(橙色の枠)

forを使う場合は、ループ関連の記述をまとめて書くため、うっかり一部分を書き漏らす可能性は低い。
whileを使う場合は、注意していないとループ関連の記述の一部分が抜け落ちやすく、ループ関連の記述が不完全になりやすい。

学習時の工夫

私が書いたプログラミング入門書では、以下のように注意書きを入れるようにしました。

Content image

とはいえ、本質的には構文自体を改善してミスしにくい構文を考えるほうが良いのかな、と考えています。

良いアイデアありましたら、コメントでお知らせください。

 

 


 

 

Supporter profile iconSupporter profile iconSupporter profile icon
Article tip 3人がサポートしています
獲得ALIS: Article like 46.20 ALIS Article tip 134.10 ALIS
mizuno's icon'
  • mizuno
  • @mizuno
月70万PVウェブメディア「計算フォーム」 https://calculator.jp/ でウェブ集客支援。書籍「WordPressユーザーのためのPHP入門」他一冊。TWITTER: @ounziw

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
テクノロジー

iOS15 配信開始!!

Like token Tip token
7.20 ALIS
Eye catch
テクノロジー

彼女でも分かるように解説:ディープフェイク

Like token Tip token
32.10 ALIS
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

Like token Tip token
121.79 ALIS
Eye catch
テクノロジー

オープンソースプロジェクトに参加して自己肯定感を高める

Like token Tip token
85.05 ALIS
Eye catch
クリプト

Uniswap v3を完全に理解した

Like token Tip token
18.92 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

Like token Tip token
61.20 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
クリプト

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS
Eye catch
テクノロジー

なぜ、素人エンジニアの私が60日間でブロックチェーンゲームを制作できたのか、について語ってみた

Like token Tip token
270.93 ALIS
Eye catch
ゲーム

ドラクエで学ぶオーバフロー

Like token Tip token
30.10 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS