Menu
Coddy logo textTech

ジェネリック配列

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 のケースを処理するよう呼び出し元を誘導します。これこそが型付き言語に期待されるバグ検出機能です。

challenge icon

チャレンジ

簡単

以下を満たす first という名前のジェネリック関数を作成してください:

  • 型パラメータ T を宣言する
  • {T}items という名前のパラメータを1つ受け取る
  • 戻り値の型 T? で最初の要素を返す(空の配列の場合は nil

以下の型付き配列を作成してください:

  • "apple", "banana", "cherry" を持つ型 {string}fruits
  • 10, 20, 30, 40 を持つ型 {number}scores
  • false, true を持つ型 {boolean}flags
  • 要素を持たない型 {string}empty

その順番で、各配列に対して first を呼び出した結果をそれぞれ改行して出力してください。

自分で試してみよう

-- ここにコードを書いてください
-- 1) first<T>(items: {T}): T? を定義し、items[1] を返す
-- 2) fruits: {string}、scores: {number}、flags: {boolean} を作成し、
--    および空の {string} 配列
-- 3) 各配列の first(...) をその順序で出力する
quiz icon腕試し

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

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