【かたすいろん】

型推論 とは?

💡 書かなくても、コンパイラが空気を読んでくれる型付け
📌 このページのポイント
型推論のしくみ 開発者が書くコード let x = 42 let s = "hello" let arr = [1, 2, 3] 推論 コンパイラが推論した型 x: number s: string arr: number[] 型推論なし(明示的に書く) let x: number = 42 let s: string = "hello" 型推論あり(省略できる) let x = 42 let s = "hello" 同じ型安全性を保持
型推論のイメージ
ひよこ ひよこ

型推論って、型を書かなくていいってこと?

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

そうだよ。たとえば let x = 42 って書いたら、42は数値だからxは数値型だなってコンパイラが自動で判断してくれるんだ

ひよこ ひよこ

じゃあ動的型付けと同じなの?

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

全然違うよ。動的型付けは実行時に型が決まるけど、型推論はコンパイル時に型が確定する。つまり型安全性はしっかり保たれるんだ

ひよこ ひよこ

どんな言語で使えるの?

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

TypeScriptRustKotlinSwiftHaskellなど、モダンな静的型付け言語はほぼ対応してるよ。Haskellなんかは推論が超強力で、ほとんど型を書かなくても動くんだ

ひよこ ひよこ

でも全部推論に任せて大丈夫なのかな?

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

関数の引数や公開APIの戻り値は明示的に書いた方がいいね。推論に頼りすぎると、意図しない型が推論されてバグの原因になることもあるよ。Hindley-Milner型推論というアルゴリズムが有名で、これがベースになっている言語が多いんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「型推論」って出てきたら「コンパイラが型を自動で察してくれる機能」と思えればだいたいOK!
📖 おまけ:英語の意味
「Type Inference」 = 型の推論
💬 Infer は「推測する」という意味で、コンパイラがコードの文脈から型を推測するイメージだよ
← 用語集にもどる