【たぷる】

タプル とは?

💡 中身の数と種類が決まった「お弁当の仕切り」
📌 このページのポイント
タプル(Tuple)― 変更できない固定の組 リスト(変更可能) [ "A" "B" "C" ] ✓ 追加・削除・変更OK タプル(変更不可) ( "A" "B" "C" ) ✗ 作成後の変更は不可 🔒 タプルの特徴 ・要素の順番が保証される ・異なる型を混在できる(例: ("田中", 25, true)) ・辞書のキーに使える(不変だから安全)
タプルのイメージ
ひよこ ひよこ

配列とタプルって何が違うの?

ペンギン先生 ペンギン先生

配列は同じ型の要素を可変長で持つのが基本。タプルは「1番目は文字列、2番目は数値」のように各位置の型と要素数が決まっている。TypeScriptでは型チェックで間違った位置に間違った型を入れるとエラーになる。

ひよこ ひよこ

どういうときにタプルを使うの?

ペンギン先生 ペンギン先生

「座標の [x, y]」「APIの結果の [data, error]」「useStateの [value, setter]」など、2〜3個の関連する値をセットで返したいとき。4個以上になるならオブジェクトのほうが読みやすい。

ひよこ ひよこ

JavaScriptにはタプルの構文はないの?

ペンギン先生 ペンギン先生

JavaScriptには配列しかなく、タプルという専用構文はない。TypeScript型システム配列に「位置ごとの型と長さ」の制約をつけたものがタプル。実行時はただの配列として動いている。

ひよこ ひよこ

Pythonのタプルはイミュータブルだけど、TypeScriptのタプルは変更できるの?

ペンギン先生 ペンギン先生

TypeScriptのタプルは実行時にはただの配列だから、push()で要素を追加したりできちゃうんだ。型チェックはコンパイル時だけだから、実行時の安全性は保証されない。「as const」を使ってリードオンリータプルにすることもできるよ。Pythonのタプルは言語レベルで変更不可(イミュータブル)だから、辞書のキーに使えるという利点がある。

ひよこ ひよこ

分割代入ってタプルと関係あるの?

ペンギン先生 ペンギン先生

とても関係があるよ。Reactのconst [count, setCount] = useState(0)がまさにタプルの分割代入。useStateは[値, 更新関数]の2要素タプルを返すから、分割代入で個別の変数に取り出せる。Pythonでもa, b = (1, 2)のようにタプルをアンパックできる。複数の値を返す関数の戻り値をスッキリ受け取れるのが、タプルと分割代入の組み合わせの魅力なんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
タプルって出てきたら「各位置の型が決まっている固定長の配列」と思えばだいたいOK!
📖 おまけ:英語の意味
「tuple」 = 組
💬 数学の「n-tuple(n個の組)」が語源で、double, triple, quadruple の -ple/-tuple から
← 用語集にもどる