【ぶんかつだいにゅう】

分割代入 とは?

💡 箱の中身を「一気に取り出して名前をつける」構文
📌 このページのポイント
分割代入:オブジェクト/配列から値を取り出す 従来の書き方 const name = user.name; const age = user.age; const city = user.city; 分割代入 const { name, age, city } = user; → 1行でまとめて取り出せる! 配列の分割代入 const arr = [1, 2, 3]; const [a, b, c] = arr; a=1, b=2, c=3 残余パターン(...rest) const [first, ...rest] = [1, 2, 3, 4]; first=1, rest=[2,3,4]
分割代入のイメージ
ひよこ ひよこ

分割代入ってどういうものなの?

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

たとえばオブジェクトから値を取り出すとき、従来は「const name = user.name; const age = user.age;」と1つずつ書いていたのが、分割代入なら「const { name, age } = user;」の1行で済むんだ。配列なら「const [first, second] = items;」のように角括弧を使うよ。

ひよこ ひよこ

関数の引数でも使えるって聞いたけど?

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

そうなんだ!たとえば「function greet({ name, age }) { ... }」と書けば、呼び出し側でgreet(user)とするだけで、name・ageが自動で取り出される。引数が多いときにオブジェクトで渡すパターンと組み合わせると、どの値を使っているかが一目瞭然になるよ。

ひよこ ひよこ

分割代入で気をつけることってある?

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

入れ子のオブジェクトを深く分割代入しすぎると読みにくくなるから要注意だよ。「const { a: { b: { c } } } = obj;」みたいな書き方は避けたほうがいい。あとオブジェクトの分割代入はプロパティ名と変数名が一致している必要があるけど、「const { name: userName } = user;」のようにリネームもできるから覚えておくと便利だよ。

ひよこ ひよこ

分割代入ってPythonでもできるの?

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

Pythonにも「アンパック」という同様の機能があるよ。「a, b, c = [1, 2, 3]」でリストの分割代入、「name, age = ("太郎", 25)」でタプルの分割代入ができる。「*rest」で残りをまとめて受け取ることもできるんだ。実はPython 3.10で導入された「構造パターンマッチング(match/case文)」は分割代入の発展形とも言えるよ。「match point: case Point(x=0, y=y): ...」のようにオブジェクトの構造に基づいてマッチングと代入を同時にできる。JavaScriptの分割代入に慣れた人ならすぐ理解できるはずだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「分割代入」って出てきたら「配列オブジェクトから必要な値を取り出して変数に入れる便利な書き方だな」と思えればだいたいOK!
📖 おまけ:英語の意味
「destructuring assignment」 = 構造を分解する代入
💬 destructureは「構造を壊す」という意味。構造から中身を取り出すイメージだよ
← 用語集にもどる