目次
関数のサンプル
関数の基本
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)といいます。
実務では設定済み関数を作るのに便利です。
クロージャとは、関数とその関数が定義された時の環境(変数など)をセットで閉じ込めたものを指します。
関連の記事
