Menu
Coddy logo textTech

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

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しか認識しないため、オートコンプリートは機能せず、型エラーもすり抜けます。入力されたものと出力されるものとのつながりが失われるのです。

本当に必要なのは、あらゆる型で動作し、なおかつ各呼び出しで使われた型を覚えている関数です。それをまさに提供してくれるのがジェネリックであり、この章ではそれを扱います。

自分で試してみよう

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

quiz icon腕試し

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

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

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