[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("Michael")
    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"}

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

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤新文章】
    Facebook Twitter Plurk
    標籤: LUA, LUA 語法, FUNCTION