無名関数の型定義
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 23/73。
Luaでは、関数は値です — これまで変数はに保持したり受け渡したりしてきました:local f = function(x) return x * 2 end。これらの匿名関数(関数式)は、名前付き関数と全く同じように型注釈を取ります:
local double = function(x: number): number
return x * 2
end
local shout = function(text: string): string
return string.upper(text) .. "!"
endパラメータはカッコ内に name: type と指定し、戻り値の型は閉じカッコの後に続きます — 名前付き関数との唯一の違いは、function キーワードに名前がなく、式全体が変数に代入される点です。
JavaScriptやTypeScriptを見たことがある方は、Luauにはアロー関数がない(=> 構文が存在しない)ことに注意してください。長短に関わらず、すべての関数式は function ... end で記述します。
代入された関数は、通常の関数と同様に変数経由で呼び出せます:double(21) は 42 を返し、チェッカーは記述された型注釈に基づいてすべての呼び出しを検証します。
チャレンジ
簡単この名前付き関数(named function)を、すべての型注釈を保持したまま、ローカル変数に格納された無名関数(無名expression)として書き換えてください:
function subtract(a: number, b: number): number
return a - b
endつまり:同じパラメータ型と戻り値の型を持つ local subtract = function(...) ... end を作成します。
次に、型付きの無名関数をさらに2つ作成してください:
createMessage—text: stringを受け取り、文字列"Message: [text]"を返します(戻り値の型string)isPositive—num: numberを受け取り、数値が 0 より大きい場合はtrue、それ以外の場合はfalseを返します(戻り値の型boolean)
それぞれを独自の行で呼び出して出力(print)してください:
subtract(10, 3)createMessage("Hello World")isPositive(-5)isPositive(8)
自分で試してみよう
-- ここにコードを書いてください
-- local subtract = function(a: number, b: number): number ... end
-- local createMessage = function(text: string): string ... end
-- local isPositive = function(num: number): boolean ... end
-- そして4つの結果を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数