程式的執行流程是指被執行的程式語句的順序。預設情況下,語句得到一個又一個的執行結果。
然而,有很多時候需要執行的順序是不同的預設順序的完成這項工作。
Euphoria有許多流程控制語句,可以用它來安排執行順序的語句。
exit關鍵字,退出迴圈。這會導致流程立即離開當前的迴圈,並重新開始迴圈結束後的第一條語句。
exit 語句的語法:
exit [ "Label Name" ] [Number] |
exit 語句將終止的最新和最內層迴圈,直到指定的可選標籤名稱或號碼。
exit N 的一種特殊形式是exit 0。這使得所有級別的迴圈不管深度。最外層迴圈塊控制後繼續。同樣地,exit -1出口的第二最外層迴圈,等等。
#!/home/euphoria-4.0b2/bin/eui integer b for a = 1 to 16 do printf(1, "value of a %d\n", a) if a = 10 then b = a exit end if end for printf(1, "value of b %d\n", b) |
這將產生以下結果:
value of a 1 value of a 2 value of a 3 value of a 4 value of a 5 value of a 6 value of a 7 value of a 8 value of a 9 value of a 10 value of b 10 |
exit語句 break語句 的工作原理完全一樣,但由 if語句或switch語句提供,而不是適用於任何形式的迴圈語句。
break 語句的語法是:
break [ "Label Name" ] [Number] |
break語句終止的最新和最內層的 if 或switch塊,直到指定的可選標籤名稱或號碼。
break N 的一種特殊形式是break 0。這使得如果開關塊的最外層,不管深度。繼續控制後的最外塊。同樣,break -1,第二 if 或 switch 塊,依此類推。
#!/home/euphoria-4.0b2/bin/eui integer a, b sequence s = {'E','u', 'p'} if s[1] = 'E' then a = 3 if s[2] = 'u' then b = 1 if s[3] = 'p' then break 0 -- leave topmost if block end if a = 2 else b = 4 end if else a = 0 b = 0 end if printf(1, "value of a %d\n", a) printf(1, "value of b %d\n", b) |
這將產生以下結果:
value of a 3 value of b 1 |
它適用於去到下一個疊代,並跳過其餘的疊代迴圈continue語句繼續執行。
去到下一個疊代意味著測試條件變數指數,並檢查是否仍然在一定範圍內。
continue 語句的語法是:
continue [ "Label Name" ] [Number] |
continue語句會再次重申了最新和最內層迴圈,直到指定的可選標籤名稱或號碼。
continue Nr的一種特殊形式是continue 0。此重新疊代最外層迴圈的深度不管。同樣,從第二最外層迴圈continue -1開始等等。
#!/home/euphoria-4.0b2/bin/eui for a = 3 to 6 do printf(1, "value of a %d\n", a) if a = 4 then puts(1,"(2)\n") continue end if printf(1, "value of a %d\n", a*a) end for |
這將產生以下結果:
value of a 3 value of a 9 value of a 4 (2) value of a 5 value of a 25 value of a 6 value of a 36 |
它適用於去到下一個疊代,並跳過其餘的疊代迴圈重試語句繼續執行。
retry 語句的語法是:
retry [ "Label Name" ] [Number] |
重試執行當前疊代的迴圈,它適用於語句重試。宣告跳轉到指定的迴圈的第一條語句,沒有測試任何東西,也遞增迴圈索引。
retry n 的一種特殊形式是 retry 0。此最外層迴圈執行的重試次數,而不管深度。同樣地,重試retry -1 的第二最外層迴圈等等。
通常情況下,一個子塊,其中包含了重試語句還包含另一個流控制包含退出,繼續進行或中斷,因為否則會無休止地執行迭代。
#!/home/euphoria-4.0b2/bin/eui integer errors = 0 integer files_to_open = 10 for i = 1 to length(files_to_open) do fh = open(files_to_open[i], "rb") if fh = -1 then if errors > 5 then exit else errors += 1 retry end if end if file_handles[i] = fh end for |
由於重試不改變 i 的值,並試圖再次開啟相同的檔案,必須有一種方式來脫離迴圈可由 exit 語句提供。
goto語句指示計算機恢復執行程式碼,在標記的地方。
地方恢復執行的語句稱為目標。它的限制在於當前的常規,如果超出任何常規或當前檔案。
goto 語句的語法是:
goto "Label Name" |
一個goto語句的目標可以是任何可存取的標籤語句:
label "Label Name" |
標籤名稱必須用雙引號的字串常數。那將是非法的,在Euphoria 識別符號的字元可能出現在一個標籤名稱,因為它是一個普通的字串。
#!/home/euphoria-4.0b2/bin/eui integer a = 0 label "FIRST" printf(1, "value of a %d\n", a) a += 10 if a < 50 then goto "FIRST" end if printf(1, "Final value of a %d\n", a) |
這將產生以下結果:
value of a 0 value of a 10 value of a 20 value of a 30 value of a 40 Final value of a 50 |