Menu
CoddyTech

ジェネリック配列

CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 64/80。

ジェネリクスはテーブルを扱うようになると、とても便利です。型付き配列はすでに{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の場合を処理するよう呼び出し側に促します。これは、型付き言語に期待する、まさにバグを見つけてくれる機能です。

challenge icon

チャレンジ

簡単

任意の配列の最初の要素を取得します。

  1. local function first<T>(items: {T}): T?を記述し、items[1]を返すようにします。
  2. local fruits: {string} = {"apple", "banana"}とlocal empty: {number} = {}を宣言します。
  3. first(fruits)を出力し、その後first(empty)を出力します。

コードを実行を押します。出力にはappleとnilが表示されます。

自分で試してみよう

-- 1) first<T>(items: {T}): T?
-- 2) fruits: {string} と空の {number}
-- 3) それぞれの最初の要素を出力する

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

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