ジェネリック配列
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 60/73。
ジェネリクスは、テーブルが関係してくると真価を発揮します。型付きの配列を {number} や {string} のように記述したことがあるかと思いますが、ジェネリック関数内では要素の型を単に T と表すことができ、{T} は「T が何であれ、その要素の配列」を意味します。
最も典型的な例を見てみましょう。任意の配列の最初の要素を取得する関数です:
local function first<T>(items: {T}): T?
return items[1]
end{string} を渡すと、チェッカーは T = string と推論するため、結果は文字列になります。{number} を渡せば数値になります。1つの関数だけで、型ごとに作成していた同様の関数すべてを置き換えることができます。
戻り値の型をよく見てください。T ではなく T? になっています。配列は空である可能性があり、その場合 items[1] は nil になります。以前学んだオプショナル型は「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) first<T>(items: {T}): T? を定義し、items[1] を返す
-- 2) fruits: {string}、scores: {number}、flags: {boolean} を作成し、
-- および空の {string} 配列
-- 3) 各配列の first(...) をその順序で出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数