型推論(かたすいろん)とはプログラミング言語の機能の1つで、静的な型付けを持つ言語において、変数や関数の型を宣言しなくてもそれを導くのに使われた関数の型シグネチャなどから自動的に型を決定する機構のこと。推論に失敗するとその時点でエラーを報告できるため、少なくとも誤った型を用いる事によるバグは回避できる。また、記述をアルゴリズムに集中できるのでプログラムの抽象度が上がるというメリットもある。代表的な型推論アルゴリズムとして、Hindley/Milner 型推論アルゴリズムがある。各々著名なコンピュータ科学者の名前からつけられた名前であるが、Hindley は論理学者として型推論システムを先に開発した。型推論を持つ言語としてはHaskell、ML、Vala、C#、Java、Scala、OCaml、D言語、Concurrent Clean、C++11、Swiftなどがある。静的型付け関数型言語のほとんどがなんらかの型推論の機能を持っている。ほとんどの言語においては、関数の仮引数および戻り値やローカル変数等は、それらがもつデータの種類を表す型をもつ。実行時にならないと型がわからない言語を動的型付けの言語という。一方、コンパイル時に型がわかる言語を静的型付けの言語という。静的型付けの言語において、関数の仮引数および戻り値の型やローカル変数の型は、通常は明示的に表記する必要がある。例えば、次はC言語の例である。関数定義の最初の行codice_1では、codice_2は整数一つを入力としてとり、整数を結果として出力する、と宣言している。codice_3の行では、ローカル変数codice_4が整数型であることを宣言している。型推論の機能がある言語では、例えば次のように書くことができるだろう。この書き方は動的型付けの言語に非常によく似ているが、しかしながらすべての型はコンパイル時に定められる。この仮想的な例では、codice_5演算子は常に二つの整数を一つの整数に変換する。これから、codice_6の値が整数であることが型推論によって推論される。故にcodice_4の型は整数であり、codice_2の返り値が整数であることがわかる。同様にcodice_5演算子が入力として整数をとることからcodice_10が整数であることがわかり、codice_2の引数の型が整数であることがわかる。上記例では変数宣言の際の暗黙的な型指定を挙げているが、varだけが型推論ではない。例えば、Javaではバージョン5.0の頃からメソッドスコープの型変数を推論する機能を持つ。その他、Java 7 からは型変数を持つクラスをnewする場合にバインドすべき型を推論するダイヤモンド・オペレーターという機能を持つ。このように、自動的に型を決定する機構はvar以外にも存在しうる。変数宣言の際の暗黙的な型指定のみを指して「型推論」と表現することは混乱を招くので注意されたい。動的に型付けを行う言語の場合、文法的には型付けが行われず、あらゆる型の可能性を考慮して処理を進める必要があるため、処理が遅くなる原因となる。JITコンパイラによって高速化を図る場合、型推論によりあるデータを「特定の型」として扱うことが可能であれば、その型に合わせた処理だけをすることで高速化が行える。JavaScript では、Webブラウザの分野では高速化が特に求められているが、2011年12月20日にリリースされたFirefox 9から高速化のため型推論技術を採用している。Groovy 2.0 ではコンパイル時型検査 codice_12 の機能をつけたが、型を指定していない変数に対しても、型推論を利用して変数に型を割り振り、型検査を行っている。同様に Groovy に対応した IntelliJ IDEA などの統合開発環境も型推論を利用してアシストを行っている。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。