
- Euphoria 教程
- Euphoria - 首頁
- Euphoria - 概述
- Euphoria - 環境
- Euphoria - 基本語法
- Euphoria - 變數
- Euphoria - 常量
- Euphoria - 資料型別
- Euphoria - 運算子
- Euphoria - 分支
- Euphoria - 迴圈型別
- Euphoria - 流程控制
- Euphoria - 短路
- Euphoria - 序列
- Euphoria - 日期和時間
- Euphoria - 過程
- Euphoria - 函式
- Euphoria - 檔案 I/O
- Euphoria 有用資源
- Euphoria - 快速指南
- Euphoria - 庫例程
- Euphoria - 有用資源
- Euphoria - 討論
Euphoria - 流程控制
程式執行流程指的是程式語句執行的順序。預設情況下,語句一個接一個地執行。
但是,很多時候需要更改執行順序以完成任務。
Euphoria 有許多流程控制語句,您可以使用它們來安排語句的執行順序。
exit 語句
退出迴圈使用關鍵字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
break 語句
break 語句的工作原理與exit 語句完全相同,但適用於 if 語句或 switch 語句,而不是任何型別的迴圈語句。
語法
break 語句的語法如下:
break [ "Label Name" ] [Number]
break 語句終止最新和最內層的 if 或 switch 塊,直到指定可選的標籤名稱或編號。
break N的一種特殊形式是break 0。這將離開最外層的 if 或 switch 塊,無論深度如何。控制在最外層塊之後繼續。同樣,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 語句的語法如下:
continue [ "Label Name" ] [Number]
continue 語句將重新迭代最新和最內層的迴圈,直到指定可選的標籤名稱或編號。
continue N的一種特殊形式是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 This would produce following result: 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 語句透過轉到下一次迭代並跳過其餘迭代來繼續執行其所應用的迴圈。
語法
retry 語句的語法如下:
retry [ "Label Name" ] [Number]
retry 語句重試執行其所應用的迴圈的當前迭代。該語句分支到指定迴圈的第一個語句,既不測試任何內容也不增加 for 迴圈索引。
retry N的一種特殊形式是retry 0。這將重試執行最外層迴圈,無論深度如何。同樣,retry -1 重試第二外層迴圈,依此類推。
通常,包含 retry 語句的子塊還包含另一個流程控制關鍵字,如 exit、continue 或 break。否則,迭代將無限執行。
示例
#!/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
由於 retry 不會更改 i 的值並嘗試再次開啟相同的檔案,因此必須有一種方法可以從迴圈中退出,exit 語句提供了這種方法。
goto 語句
goto 語句指示計算機在帶標籤的位置恢復程式碼執行。
恢復執行的位置稱為語句的目標。它僅限於位於當前例程中,或者如果位於任何例程之外,則位於當前檔案中。
語法
goto 語句的語法如下:
goto "Label Name"
goto 語句的目標可以是任何可訪問的label 語句:
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