ジェネリクスが解決する問題
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 57/73。
渡された値をそのまま返すだけの関数、つまり恒等関数が必要だと想像してください。これまでに学んだ型では、2つの選択肢がありますが、どちらも問題があります。
選択肢1:型ごとに別のコピーを1つずつ書く。関数本体は同じで、注釈だけが異なります。
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
end新しい型が増えるたびに別のコピーが必要になり、1つで修正したバグはすべてのコピーで修正しなければなりません。これはまさに、関数を書くことで避けようとしている重複です。
選択肢2:any 型を使って1つの関数にまとめる。
local function echo(value: any): any
return value
endこれで1つの関数ですべてに対応できますが、その代償として型安全性を失います。echo("hello")を呼び出しても、checkerは結果がstringであることを認識できなくなります。anyしか認識しないため、オートコンプリートは機能せず、型エラーもすり抜けます。入力されたものと出力されるものとのつながりが失われるのです。
本当に必要なのは、あらゆる型で動作し、なおかつ各呼び出しで使われた型を覚えている関数です。それをまさに提供してくれるのがジェネリックであり、この章ではそれを扱います。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ