位元詩人 [Lua] 程式設計教學:撰寫和使用函式 (Function)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

函式 (function) 將某段程式碼區塊包裝起來,並給予命名,該程式碼區塊就成為一個有意義的實體。函式可以重覆再利用,也是物件導向和模組的基礎。本文介紹函式本身,其他概念留至後文介紹。

建立函式

使用 function 保留字可建立函式。以下程式建立一個簡單的函式,並重覆呼叫三次:

function hello()
  print("Hello World")
end

hello()
hello()
hello()

這個函式既沒有參數,也沒有回傳值,實務上這樣的函式實用性較低。

在函式中使用參數 (Parameters)

我們可以透過傳入參數 (parameters) 調整函式的行為,如下例:

function hello(name)
  print("Hello " .. name)
end

hello("Michelle")
hello("Jenny")
hello("Tom")

從函式回傳值

除了傳入參數外,函式也可以回傳值 (returning values),如下例:

function add(n)
  return n + 1
end

assert(add(3) == 4)

Lua 的函式允許多個回傳值,如下例:

function divmod(a, b)
  return math.floor(a / b), a % b
end

local a, b = divmod(7, 3)
assert(a == 2)
assert(b == 1)

不定參數函式

Lua 的函式可傳入任意個參數,如下例:

function sum(...)
  local s = 0

  for i, e in ipairs{...} do
    s = s + e
  end

  return s
end

assert(sum(1, 2, 3, 4, 5) == 15)

以表 (table) 做為函式的參數

若我們將表做為參數,我們可以將參數其中的細項命名,如下例:

function rename(arg)
  os.rename(arg.old, arg.new)
end

rename{old="old.txt", new="new.txt"}

這樣的好處在於不用寫死參數位置,當參數較多時易於記憶。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。