Lua 程式設計教學:控制流程

控制結構用於改變程式進行的流程,可分為兩類:

  • 選擇 (selection)
  • 迭代 (iteration)

本文介紹 Lua 可用的控制結構:

if

if 是選擇性執行特定區塊的方式,以下為實例:

local a = 0

if a > 0 then
  print("a is larger than zero")
elseif a < 0 then
  print("a is smaller than zero")
else
  print("a is equal to zero")
end

while

符合特定條件下,while 會反覆執行某區塊。以下是實例:

local i = 1

while i <= 10 do
  print(i)
  i = i + 1
end

repeat

repeatwhile 語義相反,反覆執行某區塊,直到某個條件成立為止。以下是實例:

local i = 1

repeat
  print(i)
  i = i + 1
until i > 10

由於 repeatwhile 語義上可代換,通常是使用 while 為主,語義上剛好符合 repeat 的情境才會使用。

for

使用計數器

for 適用於有特定次數的迭代。如以下實例:

for i = 1, 10 do
  print(i)
end

不一定要以 1 計數,也可以用別的數字,實例如下:

for i = 10, 1, -2 do
  print(i)
end

使用迭代器

我們將於講解 table 時一併介紹。

break

break 用於提早離開迴圈,實例如下:

local i = 1

while i <= 10 do
  if i > 5 then
    break
  end
  
  print(i)
  i = i + 1
end

return

return 用於離開函式,我們將於講解函式時介紹。

goto

goto 僅在 5.2 版後才支援。

使用 goto 搭配標籤可以任意跳躍位置,不過,會受到可視度 (scope) 的限制。通常使用 goto 是為了模擬別的語言的 continue,實例如下:

for i = 1, 10 do
  if i % 2 ~= 0 then
    goto continue
  end
  
  print(i)
  
  ::continue::
end

如果使用 Lua 5.1 版,則要使用額外的旗標去模擬 continue,如以下實例:

for i = 1, 10 do
  local flag = true
  if i % 2 ~= 0 then
    flag = false
  end
  
  if flag then
    print(i)
  end
end