Menu
Coddy logo textTech

ユニオン型

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

1つの型だけでは不十分な場合があります。ユーザー ID は "user123" として届くこともあれば、42 として届くこともあります。通常の Lua ではうまくいくことを祈るしかありませんが、Luau にはユニオン型(union types)が用意されています。パイプ | は「または」と読みます:

local userId: number | string

userId = "user123"  -- ✓ 文字列が許可されています
userId = 42          -- ✓ 数値が許可されています
userId = true        -- ✗ 型エラー: boolean はユニオンに含まれていません

この変数にはユニオンのいずれかのメンバを保持でき、それらだけを保持できます。これが any との決定的な違いです。ユニオン型は必要な柔軟性を提供しつつ、許可する値について厳格さを保ちます。

ユニオンは、複数の入力形式を受け取る関数のパラメータに対して特に便利です:

function printId(id: number | string): ()
    print(id)
end

printId(42)          -- 数値で動作します
printId("user123")   -- 文字列で動作します

すでに知っている string? は、実はあなたの最初のユニオンでした!これは単に string | nil のショートハンドです。次のレッスンでは、ユニオン型の値を取得した後に、安全に扱う方法について学びます。

challenge icon

チャレンジ

簡単

id: number | string を受け取り、それを出力する printId という名前の関数を作成します。明示的な戻り値の型は () とします。

string | number 型の変数 status を宣言し、"<code>active" で初期化します。

次に、以下の順序で実行します:

  1. printId(42) を呼び出す
  2. printId("<code>user123") を呼び出す
  3. status を出力する
  4. status200 を再代入し、再度出力する

合計4行の出力になります。

自分で試してみよう

-- ここにコードを書く
-- printId(id: number | string): ()
-- local status: string | number = 指示の正確なテキスト
-- printId(42)を呼び出し、printId(指示の正確なテキスト)を呼び出し、
-- statusを出力し、200に再代入して再度出力
quiz icon腕試し

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

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

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