
ほとんどのコンピュータプログラミング言語では、whileループは、指定されたブール条件に基づいてコードを繰り返し実行できるようにする制御フロー ステートメントです。while ループは、繰り返しのif ステートメントと考えることができます。
概要
while構造は、コードブロックと条件/式で構成されます。[1]条件/式が評価され、条件/式がtrueの場合、[1]ブロック内の後続のコードがすべて実行されます。これは、条件/式がfalseになるまで繰り返されます。 whileループはブロックの実行前に条件/式をチェックするため、制御構造は事前テストループとも呼ばれます。これを、ループの実行後に条件/式をテストするdo whileループと比較してください。
例えば、C、Java、C#、[2] Objective-C、C++(この場合、同じ構文を使用する)の言語では、コードフラグメント
整数x = 0 ;
while ( x < 5 ) { printf ( "x = %d \n " , x ); x ++ ; }
まず x が 5 未満かどうかをチェックし、5 未満であれば {ループ本体} に入り、printf関数が実行され、x が 1 ずつ増加します。ループ本体のすべてのステートメントが完了すると、条件 (x < 5) が再度チェックされ、ループが再度実行され、このプロセスは変数xの値が 5 になるまで繰り返されます。
条件が常にtrue と評価され、無限ループが発生する可能性があり、場合によってはそれが望ましいこともあります。このようなループが意図的に作成される場合は、通常、ループの終了を制御する別の制御構造 ( 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 > 0 loop
Factorial := Factorial * Counter ;
Counter := Counter - 1 ;
end loop ;
Ada.Integer_Text_IO.Put ( Factorial ) ;終了Factorial ;
オーストラリア
カウンター← 5階乗← 1
:カウンタ> 0の間階乗× ←カウンタカウンタ- ← 1 : EndWhile
⎕ ←階乗
あるいは単に
! 5
オートホットキー
カウンタ := 5
階乗 := 1
カウンタ > 0
の場合、階乗 *= カウンタ--
MsgBox % 階乗
スモールベーシック
counter = 5 ' カウンター = 5 factorial = 1 ' 変数「factorial」の初期値
counter > 0の場合、factorial = factorial * counter counter = counter - 1のTextWindow.WriteLine ( counter ) EndWhile
ビジュアルベーシック
Dim counter As Integer = 5 ' 変数を初期化して値を設定するDim factorial As Integer = 1 ' 階乗変数を初期化する
Counter > 0の間、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 0 ] ; do factorial = $(( factorial * counter )) counter = $(( counter - 1 ))完了
$factorialをエコーする
C、C++ 言語
int main () { int count = 5 ; int factorial = 1 ;
while ( count > 1 )階乗*= count -- ;
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 > 0 )階乗=階乗*カウンター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
カウンターを5とします;階乗を1とします;
while ( counter > 1 )階乗*= counter -- ;
コンソール.log (階乗) ;
ルア
カウンタ = 5
階乗 = 1
counter > 0 の場合、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 > 0 、(*While ループ*) factorial *= counter ; (*乗算*) counter -- ; (*減分*) ];
階乗
]
Oberon、Oberon-2、Oberon-07、コンポーネント Pascal
MODULE Factorial ; IMPORT Out ; VAR Counter , Factorial : INTEGER ; BEGIN Counter := 5 ; Factorial := 1 ;
Counter > 0の場合DO Factorial := Factorial * Counter ; DEC ( Counter ) END ;
Out . Int (階乗, 0 )
END階乗.
Maya 組み込み言語
int $counter = 5 ; int $factorial = 1 ;
int $乗算;
while ( $counter > 0 ) { $multiplication = $factorial * $counter ;
$カウンタ-= 1 ;
print ( "カウンターは: " + $counter + "、乗算は: " + $multiplication + "\n" ); }
ニム
var
counter = 5 # カウンター値を 5 に設定factorial = 1 # 階乗値を 1 に設定
while counter > 0 : # counter が 0 より大きい間factorial *= counter # 階乗の新しい値を counter に設定します。dec counter # counter を counter - 1 に設定します。
エコー階乗
終了しない while ループ:
while true : echo "助けて! ループに陥ってしまいました!"
パスカル
Pascal には、 while ループの 2 つの形式、whileとrepeat があります。 while は、条件が真である限り、1 つのステートメントを繰り返します (begin-end ブロックで囲まれていない場合)。 repeat ステートメントは、untilステートメントを通じて 1 つ以上のステートメントのブロックを繰り返し実行し、条件が偽でない限り繰り返し続けます。 2 つの主な違いは、条件が最初に偽である場合、 while ループは 0 回実行される可能性があるのに対し、 repeat-until ループは常に少なくとも 1 回実行されることです。
プログラムFactorial1 ; var Fv :整数;
手順fact (カウンター:整数) ;変数 Factorial :整数;
階乗を始める:= 1 ;
Counter > 0の場合、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 > 0 ) { $factorial *= $counter -- ; # 乗算してから減算する}
$factorialを印刷します。
whileループは、開いているファイルハンドルから行ごとに (行区切りで定義されているように) データを読み込むためによく使用されます$/。
開くIN 、"<test.txt" ;
while ( <IN> ) {印刷; }
INを閉じる;
PHP の
$counter = 5 ;
$factorial = 1 ;
while ( $counter > 0 ) {
$factorial *= $counter -- ; // 乗算してから減算します。
}
$factorialをエコーします。
英語
カウンタ 固定 初期値を宣言する(5 ); 階乗 固定 初期値
を宣言する(1 );
while ( counter > 0 ) factorial = factorial * counter ; counter = counter - 1 ; end ;を実行します。
パイソン
counter = 5 # 値を5に設定します
factorial = 1 # 値を1に設定します
while counter > 0 : # 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 0 ) ( 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 0 ) ( set! factorial ( * factorial counter )) ( set! counter ( sub1 counter ))) ( displayln factorial )
ただし、Scheme や Racket では命令型のプログラミング スタイルは推奨されないことがよくあります。
ルビー
# 5 の階乗を計算します
i = 1階乗= 1
i <= 5 の階乗* = i i += 1終了
階乗する
さび
fn main () { let mut counter = 5 ; let mut factorial = 1 ;
counter > 1の場合{階乗*= counter ; counter -= 1 ; }
println! ( "{}" 、階乗); }
雑談
他の言語とは異なり、Smalltalk ではwhileループは言語構造ではなく、クラス内でBlockClosure1 つのパラメータを持つメソッドとして定義され、その本体はクロージャで、条件として self が使用されます。
Smalltalk には対応する whileFalse: メソッドもあります。
| count factorial |
count := 5 .
factorial := 1 .
[ count > 0 ] whileTrue:
[ factorial := factorial * count .
count := count - 1 ] .
トランスクリプト 表示: factorial
迅速
var counter = 5 // カウンターの初期値を 5 に設定します
var factorial = 1 // 階乗の初期値を 1 に設定します
while counter > 0 { // counter(5) が 0 より大きい間
factorial *= counter // factorial の新しい値を factorial x counter に設定します。
counter -= 1 // counter の新しい値を counter - 1 に設定します
。 }
print ( factorial ) // 階乗の値を出力します。
Tcl
カウンタを5に設定階乗を1に設定
while { $counter > 0 } {階乗を設定[式$factorial * $counter ]カウンターを1増加}
$factorial を置く
ヴェックス
intカウンター= 5 ; int階乗= 1 ;
while ( counter > 1 )階乗*= counter -- ;
printf ( "%d" ,階乗);
パワーシェル
$カウンタ = 5
$階乗 = 1
while ( $counter ) {
$factorial *= $counter --
}
$階乗
(言語)
while [3]は、代入、逐次合成、条件文、while文から構成されるシンプルなプログラミング言語であり、命令型プログラミング言語の意味論の理論的分析に使用されます。[4] [5]
C := 5 ;
F := 1 ;
C > 1の場合、F : = F * C ; C := C - 1 ;を実行します。
参照
- whileループを実行する
- forループ
- フォア
- 原始再帰関数
- 一般的な再帰関数
- LOOP(プログラミング言語) - 計算できる関数がまさに原始的な再帰関数であるという特性を持つプログラミング言語
参考文献
- ^ ab 「while 文と do-while 文 (Java チュートリアル > Java 言語の学習 > 言語の基礎)」。Dosc.oracle.com。2016年 10 月 21 日閲覧。
- ^ "while (C# リファレンス)". Msdn.microsoft.com . 2016 年 10 月 21 日閲覧。
- ^ 「第3章: Whileプログラミング言語」(PDF) . Profs.sci.univr.it . 2016年10月21日閲覧。
- ^ フレミング・ニールソン;ハンネ・R・ニールソン。クリス・ハンキン (1999)。プログラム分析の原則。スプリンガー。ISBN 978-3-540-65410-0. 2013年5月29日閲覧。
- ^ イリングワース、ヴァレリー(1997年12月11日)。コンピューティング辞典。オックスフォードペーパーバックリファレンス(第4版)。オックスフォード大学出版局。ISBN 9780192800466。
