Menu
Coddy logo textTech

無名関数

CoddyのLuaジャーニー「ロジックと制御フロー」セクションの一部。レッスン 13/54。

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

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

function(a, b)
    return a + b
end

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

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)

比較のために別の名前付きfunctionを定義する代わりに、functionはtable.sort()の2番目の引数として直接作成されています。これによりコードがより簡潔になり、ソートのロジックをそれが使用される場所に置いておけます。

challenge icon

チャレンジ

簡単

Write filterByThreshold function は numbersthreshold を受け取り、threshold より大きい数値のみを含む新しい table を返します。

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

ロジック:

  • 空の result table を作成する
  • numbers table を反復処理する
  • 各数値について、匿名 function を使用して threshold を超えているか確認する
  • チェックが true を返した場合、その数値を result table に追加する
  • フィルタリングした result table を返す

パラメーター:

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

戻り値: threshold より大きい数値のみを含む table (table)

自分で試してみよう

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

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

ロジックと制御フローのすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ