For回圈

for回圈（for loop）在电脑科学是一种程式语言的迭代陈述，能够让程式码反复的执行。
它跟其他的回圈，如while回圈，最大的不同，是它拥有一个回圈计数器，或是回圈变数。这使得for回圈能够知道在迭代过程中的执行顺序。
for 回圈的种类.
传统的 for 回圈 for-loops.
C语言中传统的for-loop包含三个部分：初始化、条件、递增，这三个部分都是可有可无的。
<syntaxhighlight Lang="java">
for (INITIALIZATION; CONDITION; AFTERTHOUGHT) 
</syntaxhighlight>
初始化是宣告（或者赋值）任何需要的变数的动作。如果你要使用多个变数，则变数的种类要一致。条件的部分则是检查是否离开这个回圈，也就是让程式码往下执行。如果条件判断为假，则离开回圈。递增在每跑一次回圈都会重复执行一次。 
<syntaxhighlight Lang="java">
for (int i=0; i<100; i++) // Prints the numbers 0 to 99 (and not 100), each separated by a space.
System.out.println();
</syntaxhighlight>
使用指标的for回圈.
这种形式的for回圈是大多数其他for回圈的变革：他允许除了数字以外的计数方式。他通常用隐含或外显指标的方式呈现，而在此回圈变数会依序表示。以下是一个代表性的例子(语言：Python)：
<syntaxhighlight Lang="python">
for item in some_iterable_object:
</syntaxhighlight>
矩阵化for回圈.
有一些语言支援比较特别的for回圈，如同它可以同时处理所有的指标in parallel，像是在FORTRAN 95中的codice_1语法。
举例来说，在以下的for回圈虚拟码片段，当计算codice_2的新的值，除了第一个(也就是 codice_3)，codice_4的参照会得到新的值。
然而，在codice_1 版本，每个计算都会使用一开始的值，不会更改 codice_6.
和一般的for回圈可能差距比较大。
应用范例.
以c语言为例：
作为无穷回圈.
<syntaxhighlight lang=C>
for (;;)
</syntaxhighlight>
这个程式码会不断的印出"just keep going on!"。
配合矩阵.
矩阵赋值：
<syntaxhighlight lang=C>
for(int i=0;i<bound_of_matrix;i++)
</syntaxhighlight>
以上给予矩阵 matrix 依序从0到bound_of_matrix-1 的值。
巢状回圈.
就像巢穴一样，一层包覆一层，所以以下这个程式码一共会执行(bound_of_x)乘上(bound_of_y)次。
<syntaxhighlight lang=C>
for(int i=0;i<bound_of_x;i++)
</syntaxhighlight>
常见的错误.
无穷回圈.
这里指的是无意产生的无穷回圈，容易导致当机。
<syntaxhighlight lang=C>
for (int i=0;i<10;i--)
</syntaxhighlight>
超出界限.
编译器会显示out of bound，通常是指尝试取矩阵界限外的值。
回圈内的变数.
回圈内的变数在出回圈之后，便无法使用。
发展概论.
主要缘起为许多需要重复执行的程式码，而不一样的程式语言也会有不一样的语法型式。
1957: FORTRAN.
在Fortran 的codice_7 回圈 同等于for回圈。
Fortran的 codice_8 回圈语法为：
接下来的两个例子做出来的结果等同于其他语言的三个参数的for回圈。其中变数COUNTER被初始化为1，以1递增，并且到5的时候停下。
<syntaxhighlight lang=FORTRAN>
8 FORMAT( I2 )
9 CONTINUE
</syntaxhighlight>
Fortran 77 或之后的版本，也可能写成： 
<syntaxhighlight lang=FORTRAN>
do counter = 1, 5
end do
</syntaxhighlight>
如果递增为1，则递增的部分可以省略。例如：
<syntaxhighlight lang=FORTRANfixed>
199 SUM SQ = SUM SQ + I**2
200 PRINT 206, SUMSQ
206 FORMAT( I2 )
</syntaxhighlight>
1958: Algol.
Algol 在Algo158首次正式格式化。
1960: COBOL.
COBOL在许多努力之下，在1959年终正式格式化。他使用PERFORM 动词，而PERFORM动词有很多功能，像是后来加上的＂结构化＂的语法，像是 END-PERFORM。忽略宣告和初始化变数的必要，类似for回圈的语法为：
<syntaxhighlight lang=COBOL>
</syntaxhighlight>
如果PERFORM有TEST AFTER，这个回圈的执行的结果会有点不同：回圈内的程式会被执行至少一次。
1964: BASIC.
BASIC 中的回圈有时称为 for-next回圈。
<syntaxhighlight lang="freebasic">
For I = 1 to 5;
Next I
</syntaxhighlight>
1964: PL/I.
由IBM公司在1950年代发明的第三代高级程式语言， 有些类似PASCAL语言。 
<syntaxhighlight lang=PLI>
do counter = 1 to 5 by 1; /* "by 1" is the default if not specified */
</syntaxhighlight>
"LEAVE" 指令可以用来结束回圈，像c语言的break，而"ITERATE"则像continue。
1968: Algol 68.
Algol68 很类似现在的for语言了：
<syntaxhighlight lang=Algol68>
FOR i FROM 1 BY 2 TO 3 WHILE i≠4 DO ~ OD
</syntaxhighlight>
1970: Pascal.
<syntaxhighlight lang=Pascal>
for Counter := 1 to 5 do
</syntaxhighlight>
1972: C/C++.
<syntaxhighlight lang=C>
for (initialization; condition; increment/decrement)
</syntaxhighlight>
1980: Ada.
<syntaxhighlight lang="ada">
for Counter in 1 .. 5 loop
end loop;
</syntaxhighlight>
1980: Maple.
Maple有两种型式的for回圈，一个是指标一定范围的值，另一个是指标一定大小的容器。
第一种：
第二种：
1982: PostScript.
他的for回圈 codice_9 初始化一个内部的变数, 并且执行到他不大于限制的值(若递增为负则以此类推)。
<syntaxhighlight lang=AppleScript>
1 1 6 {STATEMENTS} for
</syntaxhighlight>
1983: Ada 83 and above.
<syntaxhighlight lang=ADA>
procedure Main is
begin
end;
</syntaxhighlight>
1984: MATLAB.
<syntaxhighlight lang=MATLAB>
for i = 1:5 
end</syntaxhighlight>
1987: Perl.
<syntaxhighlight lang=Perl>
for ($counter = 1; $counter <= 5; $counter++) { # implictly or predefined variable
for (my $counter = 1; $counter <= 5; $counter++) { # variable private to the loop
for (1..5) { # variable impicitly called $_; 1..5 creates a list of these 5 elements
statement for 1..5; # almost same (only 1 statement) with natural language order
for my $counter (1..5) { # variable private to the loop
</syntaxhighlight>
1988: Mathematica.
<syntaxhighlight lang=Ruby>
</syntaxhighlight>
<syntaxhighlight lang=Ruby>
For[x= 0 , x <= 1, x += 0.1,
</syntaxhighlight>
1989: Bash.
<syntaxhighlight lang="bash">
for i in 1 2 3 4 5
do
done
</syntaxhighlight>
<syntaxhighlight lang="bash">
for (( i = 1; i <= 5; i++ ))
do
done
</syntaxhighlight>
1990: Haskell.
<syntaxhighlight lang="haskell">
forM_ [1..5] $ \indx -> do statements
</syntaxhighlight>
如果你想要用更正式的方式存 [1..5]的内容，一个比较官方的方式为：
<syntaxhighlight lang="haskell">
import Control.Monad as M
forLoopM_ :: Monad m => a -> (a -> Bool) -> (a -> a) -> (a -> m ()) -> m ()
forLoopM_ indx prop incr f = do
</syntaxhighlight>
并且可以这样使用：
<syntaxhighlight lang="haskell">
</syntaxhighlight>
1991: Oberon-2, Oberon-07, or Component Pascal.
<syntaxhighlight lang=Oberon2>
FOR Counter := 1 TO 5 DO
END
</syntaxhighlight>
1991: Python.
<syntaxhighlight lang=Python>
for counter in range(1, 6): # range(1, 6) gives values from 1 to 5 inclusive (but not 6)
</syntaxhighlight>
1993: AppleScript.
<syntaxhighlight lang=AppleScript>
repeat with i from 1 to 5
 -- statements
 log i
end repeat
</syntaxhighlight>
1993: Lua.
<syntaxhighlight lang=Lua>
for i = start, stop, interval do
end</syntaxhighlight>
这个程式码 <syntaxhighlight lang=Lua>
for i = 1, 5, 2 do
end</syntaxhighlight>即会印出：
<syntaxhighlight lang=Lua>1 3 5</syntaxhighlight>
1995: Java.
<syntaxhighlight lang=Java>
for (int i = 0; i < 5; i++) {
</syntaxhighlight>
1995: JavaScript.
JavaScript 支援像是C语言的三个参数的回圈，并且支援break和continue。
<syntaxhighlight lang=JavaScript>
for (let i = 0; i < 5; i++) {
</syntaxhighlight>
1995: PHP.
<syntaxhighlight lang=PHP>
for ($i = 0; $i <= 5; $i++)
</syntaxhighlight>
1995: Ruby.
<syntaxhighlight lang=Ruby>
for counter in 1..5
end
5.times do |counter| # counter iterates from 0 to 4
end
1.upto(5) do |counter|
end
</syntaxhighlight>
1996: OCaml.
请参考
<syntaxhighlight lang="ocaml">
for i = 1 to 5 do
for j = 5 downto 0 do
</syntaxhighlight>
1998: ActionScript 3.
<syntaxhighlight lang="actionscript3">
for (var counter:uint = 1; counter <= 5; counter++){
</syntaxhighlight>
参考文献.
https://web.archive.org/web/20180906124543/http://terms.naer.edu.tw/detail/2337520/