Wikiwand AI

ループ (プログラミング)

コンピュータプログラムの制御構造 From Wikipedia, the free encyclopedia

ループ (英: loop) とは、コンピュータプログラムにおける制御構造の一つであり、特定の条件が成立している間、同じ処理を繰り返し実行する制御構造である。反復処理を簡潔かつ明示的に記述するために用いられ、多くのプログラミング言語で標準的に提供されている。代表的な形式にはwhileループ、forループ、do‑whileループなどがある。

種類と制御

ループは繰り返しを継続するかを判断するための条件式(反復条件)を持つ。反復条件がループ構造の始まりに置かれる場合、前判定ループと呼ぶ。反復条件がループ構造の後ろに置かれる場合、後判定ループと呼ぶ。

ループの特別な形として、無条件に繰り返す無限ループがある。

また、ループの途中で、その回を打ち切り次の繰り返しに進む、あるいは繰り返し自体を終了するといった制御が行われることも多い。さらに、入れ子になった内側のループの中から外側のループを終了させる制御が必要となる場合もある。

関数型プログラミングでは、再帰によってループを扱う。

文

C言語などの手続き型言語ではループは文 (プログラミング) で記述する。実際のキーワード(あるいは予約語)や構文といった仕様は言語によって異なる。文ではなくループする式が提供されている言語もある[1]。

これらの文を使わずとも、if文とgoto文(とラベル)を使ってループを記述することも可能であるが、可読性やメンテナンス性の観点からこれらの文を使うことが望ましい。コンパイラが機械語や中間表現に変換すると、分岐命令やジャンプ命令に置き換えられる。

処理待ちのためのループ

かつてのプログラミング環境では、処理待ちをするためにループを使用する場合があった。例えば、

ユーザーが何かキーを入力するまで待機する:

10 PRINT "Press any key to continue: "
20 IF INSTR$ = "" THEN GOTO 20
30 PRINT "Thank you!"

一定の時間間隔をおいて処理を行う:

10 PRINT "A"
20 FOR I = 0 TO 10000: NEXT
30 PRINT "B"
40 FOR I = 0 TO 10000: NEXT
50 PRINT "C"

などである。これらのコーディングテクニックは、スリープ機能やマルチタスク機能、イベント(メッセージ)やスレッド機能などが用意されていなかったために使用せざるを得なかったものであり、現代的なオペレーティングシステムにおけるプログラミング環境ではほとんど使用されることはない。特にスピンループを使用した待機は、実際の待機時間がプロセッサ(CPU)のハードウェア仕様(クロック周波数)に左右され、また負荷に応じてクロックが変動する動的オーバークロック機構(Intel Turbo Boostなど)を備えたプロセッサでは通用しない。さらに、スピンループは1つのプログラムが延々とプロセッサ時間(CPU時間)を使い続けることになり、電力効率が悪くなったり、優先順位の低い別のタスクの実行速度に悪影響を与えたりする[2]。コンパイラの最適化によって、無意味なループは除去されてしまうこともある[3]。

脚注

関連項目

Related Articles

Timelines

Top Qs

Fact Checks