Menu
Coddy logo textTech

ジェネリック配列

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 のケースを処理するよう促します。これは、型付き言語に期待する、まさにバグを見つけてくれる仕組みです。

challenge icon

チャレンジ

簡単

firstという名前のジェネリック関数を作成します。この関数は次の条件を満たします:

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

次の型付き配列を作成します:

  • "apple""banana""cherry" を含む、型 {string}fruits
  • 10203040 を含む、型 {number}scores
  • falsetrue を含む、型 {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(...) をその順序で出力する
quiz icon腕試し

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

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

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