whileループ

whileループフロー図

コンピュータプログラミングにおいてwhileループはブール条件に基づいてコードを繰り返し実行することを可能にする制御フロー です。whileループは、if文を繰り返し実行したものと考えることができます

概要

while文は、コードブロックと条件式で構成されます。[1]条件式が評価され、真の場合、[1]コードブロックが実行されます。これは、条件式が偽になるまで繰り返されます。whileループはブロックの実行前に条件式をチェックするため、この制御構造は事前テストループとも呼ばれます。一方、do-whileループはブロックの実行後に条件式をテストします。

例えば、CJavaC#[2] Objective-CC++この場合、同じ構文を使用する)の言語では、コードフラグメント

int x = 0 ; while ( x < 5 ) { printf ( "x = %d \n " , x ); x ++ ; }           

まずxが5未満かどうかをチェックし、5未満であればループ本体に入り、printf()が呼び出されてxが1ずつ増加します。ループ本体の文の実行が完了すると、条件(x < 5)が再度チェックされ、ループが再度実行されます。この処理はxの値が5になるまで繰り返されます。

条件は常に真となり、無限ループを引き起こす可能性があります。この場合、ループの終了を制御する早期終了制御構造(break文など)が存在する可能性があります。例えば、次のようになります。

while ( true ) { // 複雑な処理を実行するif ( someCondition ) break ; // その他の処理}       

これらの while ループは5 の階乗を計算します。

アクションスクリプト3

var counter : int = 5 ; var factorial : int = 1 ;        while ( counter > 1 ) {階乗*= counter ; counter --; }        Printf ( "Factorial = %d" ,階乗); 

エイダ

 Ada.Integer_Text_IOを使用;手順 Factorial  is  Counter  :  Integer  :=  5 ;  Factorial  :  Integer  :=  1 ; begin  while  Counter  >  1  loop  Factorial  :=  Factorial  *  Counter ;  Counter  :=  Counter  -  1 ;  end  loop ; Ada . Integer_Text_IO . Put  (階乗);階乗の終了 ;

APL

カウンター5階乗1    :カウンタ> 1 の階乗× カウンタカウンタ- 1の間: EndWhile         階乗  

あるいは単に

! 5

オートホットキー

カウンター :=  5階乗 :=  1 カウンタ >  1 の場合、階乗 *= カウンタ--MsgBox  % 階乗

スモールベーシック

counter = 5 ' カウンター = 5 factorial = 1 ' 変数「factorial」の初期値      カウンタ> 1 のとき、階乗=階乗*カウンタカウンタ=カウンタ- 1 のとき、EndWhile             TextWindow . WriteLine ( "Factorial = " + factorial )  

ビジュアルベーシック

Dim counter As Integer = 5 ' 変数を初期化して値を設定するDim factorial As Integer = 1 ' 階乗変数を初期化する            counter > 1のとき、 factorial = factorial * counter counter = counter - 1を繰り返す' プログラムは、counter = 0 になるまで、ここで実行されます。               Visual Basic .NET の 'Debug.Print factorial ' Console.WriteLine(factorial)

Bourne(Unix)シェル

counter = 5 factorial = 1 while [ $counter -gt 1 ] ; do factorial = $(( factorial * counter )) counter = $(( counter - 1 ))完了            $factorialをエコーする 

C、C++

int main () { intカウンター= 5 ; int階乗= 1 ;           while ( counter > 1 ) {階乗*= counter -- ; }         printf ( "%d" ,階乗); } 

ColdFusion マークアップ言語 (CFML)

スクリプト構文

カウンター =  5 ;階乗 =  1 ;while  ( counter  >  1 )  { 階乗 *=  counter -- ; }writeOutput (階乗);

タグ構文

<cfset  counter  =  5 > <cfset  factorial  =  1 > <cfloop  condition = "counter GT 1" >  <cfset  factorial  *=  counter -- > </cfloop> <cfoutput> #階乗# </cfoutput>

フォートラン

プログラムFactorialProg整数::カウンタ= 5整数::階乗= 1           do while ( counter > 1 )階乗=階乗*カウンタcounter =カウンタ- 1 end do               print * 階乗終了プログラムFactorialProg  

行く

Go には while 文はありませんが、 for 文の一部の要素を省略するときに for 文の機能を持ちます。

カウンター階乗: = 5、1    カウンタ> 1 の場合{カウンタ階乗=カウンタ- 1 階乗*カウンタ}        

Java、C#、D

ループのコードは Java、C#、D で同じです。

intカウンター= 5 ; int階乗= 1 ;      while ( counter > 1 ) {階乗*= counter -- ; }       

JavaScript

counter = 5とします; factorial = 1とします;      while ( counter > 1 )階乗*= counter -- ;      コンソール.log (階乗) ;

コトリン

出典: [3]

変数カウンタ= 5変数階乗= 1      while ( counter > 1 ) {階乗=階乗*カウンターカウンター=カウンター- 1 }              println (階乗)

ルア

カウンタ= 5階乗= 1    counter > 1の場合、 factorial = factorial * counterを実行し、 counter = counter - 1を実行します。終了              印刷(階乗)

MATLAB、オクターブ

カウンター= 5 ;階乗= 1 ;    while ( counter > 0 ) factorial = factorial * counter ; % 乗算counter = counter - 1 ; % 減算end               階乗

マセマティカ

ブロック[{ counter = 5 factorial = 1 }、(*counter と factorial をローカル化*) While [ counter > 1 (*While ループ*) factorial *= counter ; (*乗算*) counter -- ; (*減分*) ];         階乗]

Oberon、Oberon-2、Oberon-07、コンポーネント Pascal

MODULE  Factorial ; IMPORT  Out ; VAR  Counter ,  Factorial :  INTEGER ; BEGIN  Counter  : =  5 ;  Factorial  : =  1 ;  Counter  >  1 の ときDO  Factorial  : =  Factorial  *  Counter ;  DEC ( Counter )  END ; 出力. Int (階乗, 0 ) END 階乗.

Maya 組み込み言語

int $counter = 5 ; int $factorial = 1 ;      while ( $counter > 1 ) { $factorial *= $counter ; $counter -= 1 ; }          print ( "Factorial = " + $factorial + "\n" );    

ニム

var counter = 5 # カウンター値を 5 に設定factorial = 1 # 階乗値を 1 に設定        while counter > 1 : # counter が 0 より大きい間factorial *= counter # 階乗の新しい値を counter に設定します。dec counter # counter を counter - 1 に設定します。           エコー階乗 

終了しない while ループ:

while true : echo "助けて! ループに陥ってしまいました!"   

パスカル

Pascalにはwhileループの2つの形式があり、.while条件が真である限り1つの文を繰り返します(begin-endブロックで囲まれていない場合)。.は条件が偽になるまで1つ以上の文のブロックを繰り返し実行します。2つの主な違いは、条件が最初に偽の場合、.は0回実行されるのに対し、.は少なくとも1回実行されることです。repeat-untilwhilerepeat-untilwhilerepeat-until

プログラムFactorial1 ; var Fv :整数;    手順fact (カウンター:整数) ;変数​​ Factorial :整数;     階乗を開始:= 1 ;    Counter > 1の場合、begin Factorial : = Factorial * Counter ; Counter := Counter - 1 end ;                 WriteLn (階乗)終了; begin Write ( '階乗を返す数値を入力してください: ' ) ; readln ( fv ) ; repeat fact ( fv ) ; Write ( '階乗を返す別の数値を入力してください (または終了するには 0 を入力してください): ' ) ; until fv = 0 ; end .       

パール

私の$counter = 5 ;私の$factorial = 1 ;      while ( $counter > 1 ) { $factorial *= $counter -- ; # 乗算してから減算する}        $factorialを印刷します 

whileループは、開いているファイルハンドルから行ごとに ($/行区切りで定義されているとおりに) データを読み込むためによく使用されます。

開くIN "<test.txt" ;  while ( <IN> ) {印刷; }   INを閉じる; 

PHP

$counter  =  5 ; $factorial  =  1 ;while  ( $counter  >  1 )  {  $factorial  *=  $counter -- ;  // 乗算してから減算します。} $factorialをエコーし​​ます

PL/I

PL/Iステートメントは、 for ループ、 while ループ、または do until ループのDOいずれかとして機能できます。

 カウンタ 固定 初期値を宣言する5  階乗 固定 初期値を宣言する1 do while ( counter > 1 ) factorial = factorial * counter ; counter = counter - 1 ; end ;             

パイソン

counter  =  5  # 値を5に設定しますfactorial  =  1  # 値を1に設定しますwhile  counter  >  1 :  # counter(5) が 0 より大きい間 factorial  *=  counter  # 階乗の新しい値を counter に設定します。 counter  -=  1  # カウンターを counter - 1 に設定します。print ( factorial )  # 階乗の値を出力します。

終了しない while ループ:

while  True :  print ( "助けて!ループに陥ってしまいました!" )

ラケット

Racket では、他のScheme実装と同様に、名前付き let がループを実装する一般的な方法です。

#lang racket ( define counter 5 ) ( define factorial 1 ) ( let loop () ( when ( > counter 1 ) ( set! factorial ( * factorial counter )) ( set! counter ( sub1 counter )) ( loop ))) ( displayln factorial )                     

マクロ システムを使用すると、whileループを実装するのは簡単な作業です (通常はマクロを導入するために使用されます)。

#lang racket ( define-syntax-rule ( while test body ... ) ; while ループを実装します( let loop () ( when test body ... ( loop )))) ( define counter 5 ) ( define factorial 1 ) ( while ( > counter 1 ) ( set! factorial ( * factorial counter )) ( set! counter ( sub1 counter ))) ( displayln factorial )                              

ただし、Scheme や Racket では命令型のプログラミング スタイルは推奨されないことがよくあります。

ルビー

# カウントダウンバリアントcounter = 5 factorial = 1    カウンタ> 1 の階乗* =カウンタカウンタ-= 1終了         階乗を置く 
# カウントアップバリアントcounter = 2 factorial = 1    カウンタ<= 5 の階乗* =カウンタカウンタ+= 1終了         階乗を置く 

さび

fn main () { let mut counter = 5 ; let mut factorial = 1 ;             counter > 1の場合{階乗*= counter ; counter -= 1 ; }            println! ( "{}" ,階乗); } 

雑談

他の言語とは異なり、Smalltalk ではwhileループは言語構造ではなく、クラス内でBlockClosure1 つのパラメータを持つメソッドとして定義され、その本体はクロージャで、条件として self が使用されます。

Smalltalk には対応する whileFalse: メソッドもあります。

| count 階乗| count  :=  5 .階乗 :=  1 .
[ count  >  0 ] whileTrue: [階乗 := 階乗 *  count .  count  :=  count  -  1 ] .トランスクリプト 表示: 階乗

迅速

var counter = 5 // カウンターの初期値を 5 に設定しますvar factorial = 1 // 階乗の初期値を 1 に設定します        while counter > 1 { // counter(5) が 0 より大きい間factorial *= counter // factorial の新しい値を factorial x counter に設定します。counter - = 1 // counter の新しい値を counter - 1 に設定します。 }             print ( factorial ) // 階乗の値を出力します。 

Tcl

 カウンタを5に設定し、階乗を1に設定   while { $counter > 1 } {階乗を設定[式$factorial * $ counter ]カウンターを1増加}             $factorialを置く 

パワーシェル

$カウンター =  5 $階乗 =  1while  ( $counter )  {  $factorial  *=  $counter -- }$階乗

(言語)

while [4]は代入、逐次合成、条件文、while文から構成されるシンプルなプログラミング言語で、命令型プログラミング言語の意味論の理論的分析に使用されます。[5] [6]

C  :=  5 ; F  :=  1 ;while  ( C  >  1 )で、  F := F * C ; C := C - 1 ;を実行します。          

参照

参考文献

  1. ^ ab 「while文とdo-while文(Javaチュートリアル > Java言語の学習 > 言語の基礎)」Dosc.oracle.com 。 2016年10月21日閲覧
  2. ^ "while (C# リファレンス)". Msdn.microsoft.com . 2016年10月21日閲覧
  3. ^ 「条件とループ | Kotlin」Kotlinヘルプ. 2025年10月21日閲覧
  4. ^ 「第3章 Whileプログラミング言語」(PDF) . Profs.sci.univr.it . 2016年10月21日閲覧
  5. ^ フレミング・ニールソン;ハンネ・R・ニールソン。クリス・ハンキン (1999)。プログラム分析の原則。スプリンガー。ISBN 978-3-540-65410-0. 2013年5月29日閲覧
  6. ^ イリングワース、ヴァレリー(1997年12月11日)コンピューティング辞典』オックスフォード・ペーパーバック・リファレンス(第4版)オックスフォード大学出版局。ISBN 9780192800466
「https://en.wikipedia.org/w/index.php?title=While_loop&oldid=1318931678」から取得