第7回 スクリプト言語の書き方(関数)

エース
エース

関数って、なんですか?

もっけ
もっけ

関数とは、決まった処理を実行してくれる部品みたいなものだよ。

同じ処理を何度も行わないといけない場合、関数を作ることによって、

記述ミスも防げるし、管理も楽になるんだ。
例を挙げていくから、一緒にみていこう。

関数の定義

関数を定義するには、予約語のfunctionを使います。予約語については、「第2回 スクリプト言語Luaの書き方(基本概念)」を読んでね。

function 関数名(引数1, 引数2, ..)
    処理
end

引数とは、関数の呼び出し元から渡される値のことです。例えば、Keisanという関数名を作ったとします。Keisan関数は渡された引数を足し算する機能を持っています。
呼び出し元では、Keisan関数に1と10を渡して計算結果を受け取っています。

function Keisan(a, b) -- aに1, bに10が入る。このa, b を関数の引数という。
	return a + b  -- return でa+bの計算結果を返す。
end

result = Keisan(1, 10) -- result にKeisanの結果を入れる。
print("結果は、" .. result)  -- 実行結果は、11。

※引数は、オプション扱いなのであってもなくても良いです。

戻り値

戻り値とは、関数から返ってくる結果のことです。関数から戻り値を返すにはreturnを記述します。

function 関数名(引数1, 引数2, ..)
    処理
    return  戻り値
end

Luaは、複数の戻り値を返すことができます。複数の戻り値を返すには return 戻り値1, 戻り値2, 戻り値3のように戻り値をカンマ区切りで記述します。複数の戻り値を受け取る側は、同じようにカンマ区切りで変数を列挙します。

function 関数名(引数1, 引数2, ..)
    処理
    return  戻り値1, 戻り値2, 戻り値3
end

value1, value2, value3 = 関数名(引数1, 引数2, ..)

可変引数

Lua の関数は最後の引数に … を指定すると、可変個の引数を受け取ることができます

function Kahencho(...)
	local a, b, c = ...
	if a then --引数指定があるときprintを実行する
		print("a=" ..a)
	end
	if b then
		print("b=" ..b)
	end
	if c then
		print("c=" ..c)
	end
end

Kahencho()  --実行結果は引数指定なしのため、なし。
Kahencho(1)  --実行結果は、a=1
Kahencho(1,10)  --実行結果は、a=1, b=10
Kahencho(1,10,100)  --実行結果は、a=1, b=10, c=100

引数が三つのドット ... で終わる可変長引数関数に渡される引数は、可変長引数式 (vararg expression) として関数に渡されます。詳しくは、Luaの公式サイト 3.4.11. 関数定義を読んでね。

無名関数

第2回 スクリプト言語Luaの書き方(基本概念)で記載していますが、Luaは、動的型付け言語(変数に型がない)であり、変数に入れる値に独自の型があります。function も変数の基本型なのです。

関数に関数名を付けずに変数として扱うことができます。関数名がない関数を無名関数と言います。

変数 = function(引数)
    処理
end

コメント

タイトルとURLをコピーしました