for 迴圈在電腦科學是一種程式語言的迭代陳述，能夠讓程式碼反覆的執行。 它跟其他的迴圈，如 while 迴圈，最大的不同，是它擁有一個迴圈計數器，或是迴圈變數。這使得 for 迴圈能夠知道在迭代過程中的執行順序。 for 迴圈的種類 傳統的 for 迴圈 forloops C 語言中傳統的 forloop 包含三個部分：初始化、條件、遞增，這三個部分都是可有可無的。 以 Java 為例： for INITIALIZATION CONDITION AFTERTHOUGHT Code for the forloops body goes here 初始化是宣告（或者賦值）任何需要的變數的動作。如果你要使用多個變數，則變數的種類要一致。條件的部分則是檢查是否離開這個迴圈，也就是讓程式碼往下執行。如果條件判斷為假，則離開迴圈。遞增在每跑一次迴圈都會重複執行一次。 在此以 Java 為例： for int i0 i100 i Prints the numbers 0 to 99 and not 100 each separated by a space Systemoutprint i Systemoutprint Systemoutprintln 使用指標的 for 迴圈 這種形式的 for 迴圈是大多數其他 for 迴圈的變革：他允許除了數字以外的計數方式。他通常用隱含或外顯指標的方式呈現，而在此迴圈變數會依序表示。以下是一個代表性的例子 語言：Python： for item in some_iterable_object do Something do Something Else 矩陣化 for 迴圈 有一些語言支援比較特別的 for 迴圈，如同它可以同時處理所有的指標 in parallel，像是在 FORTRAN 95 中的 for all 語法。 舉例來說，在以下的 for 迴圈虛擬碼片段，當計算 A i 的新的值，除了第一個 也就是 i 2，A i 1 的參照會得到新的值。 然而，在 for all 版本，每個計算都會使用一開始的值，不會更改 A for i 2 N 1 do A i A i 1 A i A i 1 3 next i for all i 2 N 1 do A i A i 1 A i A i 1 3 和一般的 for 迴圈可能差距比較大。 應用範例 以 c 語言為例： 作為無窮迴圈 for printf just keep going on 這個程式碼會不斷的印出 just keep going on。 配合矩陣 矩陣賦值： for int i0ibound_of_matrixi matrix i i 以上給予矩陣 matrix 依序從 0 到 bound_of_matrix1 的值。 巢狀迴圈 就像巢穴一樣，一層包覆一層，所以以下這個程式碼一共會執行 bound_of_x 乘上 bound_of_y 次。 for int i0ibound_of_xi for int j0jbound_of_yj matrix ij j 常見的錯誤 無窮迴圈 這裡指的是無意產生的無窮迴圈，容易導致當機。 以 C 語言為例： for int i0i10i printf confused 超出界限 編譯器會顯示 out of bound，通常是指嘗試取矩陣界限外的值。 迴圈內的變數 迴圈內的變數在出迴圈之後，便無法使用。 發展概論 主要緣起為許多需要重複執行的程式碼，而不一樣的程式語言也會有不一樣的語法型式。 1957 FORTRAN 在 Fortran 的 DO 迴圈 同等於 for 迴圈。 Fortran 的 CODEDOCODE 迴圈語法為： DO label counter first last step statements label statement 接下來的兩個例子做出來的結果等同於其他語言的三個引數的 for 迴圈。其中變數 COUNTER 被初始化為 1，以 1 遞增，並且到 5 的時候停下。 DO 9 COUNTER 1 5 1 WRITE 68 COUNTER 8 FORMAT I2 9 CONTINUE Fortran 77 或之後的版本，也可能寫成： do counter 1 5 write i2 counter end do 如果遞增為 1，則遞增的部分可以省略。例如： DO loop example PROGRAM MAIN SUM SQ 0 DO 199 I 1 9999999 IF SUM SQGT1000 GO TO 200 199 SUM SQ SUM SQ I2 200 PRINT 206 SUMSQ 206 FORMAT I2 END 1958 Algol Algol 在 Algo158 首次正式格式化。 1960 COBOL COBOL 在許多努力之下，在 1959 年終正式格式化。他使用 PERFORM 動詞，而 PERFORM 動詞有很多功能，像是後來加上的＂結構化＂的語法，像是 ENDPERFORM。忽略宣告和初始化變數的必要，類似 for 迴圈的語法為： PERFORM VARYING I FROM 1 BY 1 UNTIL I 1000 ADD I2 TO SUMSQ ENDPERFORM 如果 PERFORM 有 TEST AFTER，這個迴圈的執行的結果會有點不同：迴圈內的程式會被執行至少一次。 1964 BASIC BASIC 中的迴圈有時稱為 fornext 迴圈。 For I 1 to 5 Print I Next I 1964 PLI 由 IBM 公司在 1950 年代發明的第三代高階程式語言， 有些類似 PASCAL 語言。 以下為 PLI 使用例： do counter 1 to 5 by 1 by 1 is the default if not specified statements end LEAVE 指令可以用來結束迴圈，像 c 語言的 break，而 ITERATE 則像 continue。 1968 Algol 68 Algol68 很類似現在的 for 語言了： FOR i FROM 1 BY 2 TO 3 WHILE i4 DO OD 1970 Pascal for Counter 1 to 5 do statement 1972 CC for initialization condition incrementdecrement statement 1972 Smalltalk 1980 Ada for Counter in 1 5 loop statements end loop 1980 Maple Maple 有兩種型式的 for 迴圈，一個是指標一定範圍的值，另一個是指標一定大小的容器。 第一種： for i from f by b to t while w do loop body od 第二種： for e in c while w do loop body od 1982 PostScript 他的 for 迴圈 initial increment limit for 初始化一個內部的變數，並且執行到他不大於限制的值 若遞增為負則以此類推。 1 1 6 STATEMENTS for 1983 Ada 83 and above procedure Main is Sum_Sq Integer 0 begin for I in 1 9999999 loop if Sum_Sq 1000 then Sum_Sq Sum_Sq I2 end if end loop end 1984 MATLAB for i 15 statements end 1987 Perl for counter 1 counter 5 counter implictly or predefined variable statements for my counter 1 counter 5 counter variable private to the loop statements for 15 variable impicitly called _ 15 creates a list of these 5 elements statements statement for 15 almost same only 1 statement with natural language order for my counter 15 variable private to the loop statements 1988 Mathematica Do f x x 0 1 01 For x 0 x 1 x 01 f x 1989 Bash 第一種 for i in 1 2 3 4 5 do must have at least one command in loop echo i just print value of i done 第二種 for i 1 i 5 i do must have at least one command in loop echo i just print value of i done 1990 Haskell forM_ 15 indx do statements 如果你想要用更正式的方式存 15 的內容，一個比較官方的方式為： import ControlMonad as M forLoopM_ Monad m a a Bool a a a m m forLoopM_ indx prop incr f do f indx Mwhen prop next forLoopM_ next prop incr f where next incr indx 並且可以這樣使用： forLoopM_ 0Int len 1 indx do whatever with the index 1991 Oberon2 Oberon07 or Component Pascal FOR Counter 1 TO 5 DO statement sequence END 1991 Python for counter in range 1 6 range 1 6 gives values from 1 to 5 inclusive but not 6 statements 1993 AppleScript repeat with i from 1 to 5 statements log i end repeat 1993 Lua for i start stop interval do statements end 這個程式碼 for i 1 5 2 do print i end 即會印出： 1 3 5 1995 Java for int i 0 i 5 i perform functions within the loop can use the statement break to exit early can use the statement continue to skip the current iteration 1995 JavaScript JavaScript 支援像是 C 語言的三個引數的迴圈，並且支援 break 和 continue。 for let i 0 i 5 i 1995 PHP for i 0 i 5 i for j 0 j i j echo echo 1995 Ruby for counter in 15 statements end 5times do counter counter iterates from 0 to 4 statements end 1upto 5 do counter statements end 1996 OCaml 請參考 for_statement for ident expr to downto expr do expr done for i 1 to 5 do statements done for j 5 downto 0 do statements done 1998 ActionScript 3 for var counteruint 1 counter 5 counterstatement 參考文獻 httpswebarchiveorgweb20180906124543httptermsnaeredutwdetail2337520 參見 Foreach 迴圈 Category 控制流程 Category 程式設計中的迭代 Category 帶有程式碼示例的條目