型推論【type inference】
概要

多くの言語では、変数を定義する際に整数型や文字列型といった型情報を明記する必要がある。型推論を備えた言語では、代入される値や前後の文脈から処理系が型を判断するため、記述を省略しながらも型検査による安全性を保つことができる。
例えば、整数の値を代入した変数は、明示的な型宣言がなくても整数型と認識される。関数の引数や戻り値についても、渡される値や内部の演算処理から型が推測することができる場合が多い。処理系が十分な情報を得られない場合は、開発者が型注釈を書く必要がある。
型推論の仕組みは言語によって異なり、単純に代入された値から型を決定するものもあれば、プログラム全体の文脈を解析して整合性のとれた型を導き出す高度な方式を採る言語もある。後者では、引数や戻り値の型が明示されていなくても、呼び出し元や内部の処理から逆算的に型が確定する。
型推論を採用する言語としてTypeScriptやKotlin、Swift、Rust、Haskellなどがあり、JavaやC++、C#といった従来の静的型付け言語にも限定的な範囲で同様の機能が導入されている。TypeScriptでは変数の初期化時に代入した値の型がそのまま変数の型として扱われ、以後は異なる型の値を代入しようとするとエラーが検出される。
静的型付け言語は、コンパイル時に型の誤りを検出できる一方、型宣言を書く手間が増えるという課題を抱えていた。動的型付け言語は記述量が少なく済むが、型の誤りが実行するまで発覚しないことがある。型推論は両者の利点を組み合わせた仕組みで、コードの記述を簡潔に保ちながら静的型付け型推論による安全性を確保することができる。なお、型の指定を省略できることと動的型付けであることは別の概念であり、型推論を備えた言語であっても型の整合性はコンパイル時に厳密に検査されるのが一般的である。