ジェネリクスが解決する問題
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 57/73。
渡された値をそのまま返す関数 — つまりアイデンティティ(恒等)関数が必要だと想像してみてください。これまでに学んだ型では、2つの選択肢がありますが、どちらも難点があります。
選択肢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
プロジェクト:タスクの型定義タスクを追加する関数