ジェネリック配列
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 60/73。
ジェネリクスは、テーブルが関わるようになると非常に便利です。すでに型付きの array を {number} や {string} として記述しています。ジェネリックな function の内部では、element の型を単に T とでき、{T} は「T が最終的にどのような型になっても、その型の array」を意味します。
典型的な例を見てみましょう。任意の array の最初の element を取得します。
local function first<T>(items: {T}): T?
return items[1]
end{string} を渡すと、チェッカーは T = string と推論するため、結果は string です。{number} を渡せば number になります。1つの function で、型ごとに用意していた一連のコピーを置き換えられます。
return の型をよく見てください。T ではなく T? です。array は空の場合があり、そのとき items[1] は nil になります。以前学んだ optional 型は、そのことを正直に「T または nil」と表します。チェッカーは、結果を使用する前に呼び出し側で nil のケースを処理するよう促します。これは、型付き言語に期待する、まさにバグを見つけてくれる仕組みです。
チャレンジ
簡単firstという名前のジェネリック関数を作成します。この関数は次の条件を満たします:
- 型パラメーター
Tを宣言する - 型
{T}のitemsという名前のパラメーターを1つ受け取る - 最初の要素を返し、戻り値の型は
T?とする(空の配列の場合はnilです)
次の型付き配列を作成します:
"apple"、"banana"、"cherry"を含む、型{string}のfruits10、20、30、40を含む、型{number}のscoresfalse、trueを含む、型{boolean}のflags- 要素を含まない、型
{string}のempty
各配列をその順番で first に渡して呼び出した結果を、それぞれ1行に1つずつ出力します。
自分で試してみよう
-- ここにコードを書いてください
-- 1) first<T>(items: {T}): T? を定義し、items[1] を返す
-- 2) fruits: {string}, scores: {number}, flags: {boolean} を作成し、
-- および空の {string} 配列
-- 3) 各配列の first(...) をその順序で出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ