Lua 関数のサンプル

目次

関数のサンプル

関数の基本 / 引数ありの関数 / 戻り値のある関数 / 複数の戻り値 / 関数の引数が可変長引数

無名関数(匿名関数)

再帰関数

高階関数

関数のサンプル

関数の基本

local function test()
    print("Hello") -- Hello
end

test()

function ... endは、関数定義です。
test()は、関数呼び出しです。

 

引数ありの関数

local function calc(num1, num2)
    print(num1 + num2) -- 8
end

calc(5, 3)

この関数は、2つの引数を受け取る関数です。

 

戻り値のある関数

local function calc(num1, num2)
    return num1 + num2
end

local ans = calc(5, 3)
print(ans) -- 8

returnで値を返します。
returnの括弧は不要です。括弧ありでも動くが非推奨です。

 

複数の戻り値

local function calc(num1, num2)
    return num1 + num2, num1 - num2
end

local a, b = calc(5, 3)
print(a, b) -- 8 2

Luaは複数の値を返せるのが特徴です。

 

関数の引数が可変長引数

local function test(...)
    for _, value in ipairs({...}) do
        print(value)
    end
end

test(1, 3, 5, 7) -- 1 3 5 7

可変長引数は「...」を使用します。
{...}にすることでテーブルとして扱えます。

無名関数(匿名関数)

関数名がない関数です。変数に代入して使用します。

local f = function(num1, num2)
    return num1 + num2
end

print(f(5, 3)) -- 8

コールバックや関数の引数としてよく使います。

再帰関数

再帰関数とは、処理の中で自分自身を呼び出す関数です。

local function countdown(n)
    if n == 0 then
        return
    end

    print(n) -- 3 2 1
    countdown(n - 1)
end

countdown(3)

再帰関数は、自身の関数を呼び出します。
終了条件がないと無限再帰になるので注意が必要です。

高階関数

高階関数とは、関数を引数に取ったり、戻り値として関数を返したりする関数のことです。

 

関数の引数に関数を指定

local function apply(func, num)
    return func(num)
end

local function double(x)
    return x * 2
end

print(apply(double, 5)) -- 10

関数の引数に関数を指定できます。

 

関数の戻り値が関数

local function make_adder(num1)
    return function(num2)
        return num1 + num2
    end
end

local add3 = make_adder(3)
print(add3(2))  -- 5

内側の関数はnum1を覚えています。
これをクロージャ(closure)といいます。

実務では設定済み関数を作るのに便利です。

クロージャとは、関数とその関数が定義された時の環境(変数など)をセットで閉じ込めたものを指します。

関連の記事

Lua 関数からテーブルを参照する (self と : の使い方)

△上に戻る