Menu
Coddy logo textTech

ジェネリクスが解決する問題

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` であることしか認識できないため、自動補完が機能しなくなり、型エラーが見過ごされてしまいます。入力されたものと出力されるものの間の関係性が失われてしまうのです。

本当に必要なのは、あらゆる型で動作し、かつ各呼び出しでどの型が使用されたかを記憶している関数です。それこそがまさにジェネリクスが提供する機能であり、この章のテーマです。

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

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

Luau入門のすべてのレッスン