Menu
Coddy logo textTech

無名関数

CoddyのLuaジャーニー「Logic & Flow」セクションの一部 — レッスン 13/54。

関数を変数に格納したり、受け渡したりできることが理解できたところで、それらを記述するためのさらに簡潔な方法があります。常に関数に名前を付ける代わりに、必要な場所で直接作成することができます。これらは無名関数(anonymous functions)と呼ばれます。

匿名関数とは、単に名前のない関数のことです。functionキーワードを使用し、その直後にパラメータと本体を続けて定義します:

function(a, b)
    return a + b
end

これにより、すぐに使用できる関数値が作成されます。無名関数は、関数を他の関数に引数として渡す際に特に便利です。先ほどのカスタムソートの例を覚えていますか?無名関数を使用すると、次のようになります:

local players = {
    {name = "Alice", score = 150},
    {name = "Bob", score = 200},
    {name = "Charlie", score = 175}
}

table.sort(players, function(a, b)
    return a.score > b.score
end)

比較のために別の名前付き関数を定義する代わりに、その関数は table.sort() の第2引数として直接作成されます。これにより、コードがよりコンパクトになり、ソートのロジックを使用する場所にそのまま保持できます。

challenge icon

チャレンジ

簡単

numbersthreshold を受け取り、しきい値(threshold)より大きい数値のみを含む新しいテーブルを返す関数 filterByThreshold を作成してください。

数値をフィルタリングするために、無名関数のアプローチで table.insert() を使用してください。個別の名前付き関数を定義せずに、インラインでフィルタリングロジックを作成してください。

ロジック:

  • 空の結果テーブルを作成する
  • numbers テーブルを反復処理する
  • 各数値について、無名関数を使用してしきい値を超えているかチェックする
  • チェックが true を返した場合、その数値を結果テーブルに追加する
  • フィルタリングされた結果テーブルを返す

パラメータ:

  • numbers (table): 数値を含むリスト形式のテーブル
  • threshold (number): フィルタリングのための最小値(この値は含まない)

戻り値: しきい値より大きい数値のみを含むテーブル (table)

チートシート

匿名関数は、名前のない関数であり、functionキーワードの後にパラメータと本体を続けて定義されます:

function(a, b)
    return a + b
end

匿名関数は、関数を引数として渡す際に便利で、ロジックを使用する場所にインラインで記述できます:

local players = {
    {name = "Alice", score = 150},
    {name = "Bob", score = 200},
    {name = "Charlie", score = 175}
}

table.sort(players, function(a, b)
    return a.score > b.score
end)

これにより、比較関数をtable.sort()の引数として直接作成し、コードをより簡潔にすることができます。

自分で試してみよう

function filterByThreshold(numbers, threshold)
    -- ここにコードを記述してください
end
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン