【にゅーたいぷぱたーん】
Newtypeパターン とは?
公開:
💡 同じ「数字」でも「ユーザーID」と「金額」を別物として扱う型の仕切り役
📌 このページのポイント
- 既存の型(int, stringなど)をラップして新しい型名を付ける
- 型が違えばコンパイルエラーになるため、値の取り違えをゼロコストで防げる
- HaskellやRustで生まれた概念で、TypeScriptのBranded Typesも同様のアイデア
ペンギン先生、Newtypeパターンって普通の型と何が違うの?
例えば「ユーザーID」と「注文ID」がどちらも数値でも、Newtypeパターンを使うと型システム上は別物として扱えるんだよ。
別物にしておくと、何かいいことがあるの?
でも中身は同じ数値なんだよね?ランタイムのコストはかかるの?
それがNewtypeパターンの優れた点で、多くの言語では実行時にはただの数値として扱われてコストはゼロなんだよ。
TypeScriptだとどうやって書くの?
TypeScriptでは `type UserId = string & { _brand: 'UserId' }` のようなBranded Typesという手法で似たことを実現するんだよ。
なるほど!型に名前を付けるだけでバグを防げるなんて面白いんだね!
まとめ:ざっくりこれだけ覚えればOK!
「Newtypeパターン」って出てきたら「同じ型でも別物として扱うラッパー」と思えればだいたいOK!
📖 おまけ:英語の意味
「Newtype Pattern」 = 新しい型パターン
💬 Haskellの `newtype` キーワードに由来するパターンで、既存の型に新たな型名を付与しランタイムコストなしに型安全性を高める仕組みだよ