do-while文

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

プログラミング言語において、do-while文(ドゥ・フォワイル文)は時にはdo文とも呼ばれ、所定のブーリアン型の条件によって繰り返し実行を行う制御構造である。但し、大部分の言語とは異なり、FORTRANのdo文は、実際にはfor文と類似している。

do-while構造はコードのブロックと条件で構成される。最初にブロック中のコードが実行され、次に条件が評価される。条件がであれば、ブロック中のコードが再び実行される。条件がになるまで、これを繰り返す。do-while文はブロックを実行した後で条件をチェックするので、この制御構造は後判定ループとも呼ばれる。逆にwhile文は、ブロック中のコードを実行する前に条件を評価する。

条件が常に真であることを評価するために無限ループを作ることは可能であり、場合によっては望ましいことである。このようなループが故意に作成されたとき、通常はループを終了するための別の制御構造(例えばbreak文)を使用する。

いくつかの言語では、この形式のループのために別の命名規則を使用する。例えばPascalでは、"repeat until"文を使用する。一般的な言語では条件が"偽"になるとループを終了するが、Pascalでは逆に条件が"真"になるまでループが継続する。

C言語でのプログラム例:

x = 0;
do {
   x = x + 1;
} while (x < 3);

この例では、最初に x = x + 1 を実行し x = 1 となる。次に条件の x < 3 をチェックする。条件は真であり、コードブロックを再度実行する。変数 x が条件に合致する 3 になるまで、コードの実行と条件のチェックを繰り返す。

等価な制御構造[編集]

do {
   statements
} while (condition);

このdo-while文は、以下の制御構造と等価である。:

while (true) {
   statements
   if (!condition) break;
}

また、以下の制御構造とも等価である。:

LOOPSTART: statements
   if (condition) goto LOOPSTART;

do-while文の例[編集]

以下のdo-while文は与えられた数の階乗を計算する。

Ada[編集]

with Ada.Integer_Text_IO;
 
procedure Factorial is
  Counter   : Integer := 5;
  Factorial : Integer := 1;
begin
  loop
    Factorial := Factorial * Counter;
    Counter   := Counter - 1;
    exit when Counter = 0;
  end loop;
 
  Ada.Integer_Text_IO.Put (Factorial);
end Main;

ActionScript[編集]

var counter:Number = 5;
var factorial:Number = 1;
do {
   factorial *= counter;
   counter --;
} while (counter > 0)
trace(factorial);

Visual Basic .NET[編集]

Dim counter As UInteger = 5
Dim factorial as ULong = 1
Do
  factorial *= counter 'multiply
  counter -= 1 'decrement
Loop While counter > 0
System.Console.WriteLine(factorial)

C言語C++[編集]

unsigned int counter = 5;
unsigned long factorial = 1;
do {
  factorial *= counter--; /*Multiply, then decrement.*/
} while (counter > 0);
printf("%lu\n", factorial);

C#[編集]

uint counter = 5;
ulong factorial = 1;
do
{
      factorial *= counter--;
}
while (counter > 0);
System.Console.WriteLine(factorial);

D言語[編集]

uint i = 0;
do {
    ++i;
    writefln(i);
} while(i < 5);

Java[編集]

int counter = 5;
long factorial = 1;
do {
  factorial *= counter--; //Multiply, then decrement.
} while (counter > 0);
System.out.println(factorial);

REALbasic[編集]

Dim counter As Integer = 5
Dim factorial as Integer = 1
Do
  factorial = factorial * counter // multiply
  counter = counter - 1 // decrement
While counter > 0
MsgBox Str( factorial )
Loop

Fortran[編集]

      Program FACTORIALPROG
      Integer start
      Integer factorial,counter
      Data Start /5/
      Factorial = 1      
      Counter = Start
      do while(counter>0)
        Factorial = Factorial*counter
        Counter = Counter-1
      end do
      print *,Factorial
      End Program

Pascal[編集]

program Factorial;
var
  Counter, Factorial: integer;
begin
  Counter := 5;
  Factorial := 1;
 
  repeat
    Factorial := Factorial * Counter;
    Counter := Counter - 1;
  until Counter = 0;
 
  Write(Factorial);
end.

関連項目[編集]