型推論
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/22 01:55 UTC 版)
型推論(かたすいろん、英: type inference)とはプログラミング言語の機能の1つで、静的な型付けを持つ言語において、変数や関数シグネチャの型を明示的に宣言しなくても、変数宣言における初期化のための初期値や、関数呼び出しにおける実引数などといった、周辺情報および文脈などから自動的に(暗黙的に)各々の型を決定する機構のこと。言語によってはtype deductionと呼ばれることもある。
- ^ C言語は関数の戻り値の型を省略した場合、
int
を返すと仮定する仕様になっているが、これを型推論とは呼ばない。 - ^ 暗黙的に型指定されるローカル変数 - C# プログラミング ガイド | Microsoft Docs
- ^ auto - cpprefjp C++日本語リファレンス
- ^ decltype - cpprefjp C++日本語リファレンス
- ^ クラステンプレートのテンプレート引数推論 - cpprefjp C++日本語リファレンス
- ^ a b Type Inference brings JS improvements to Firefox Beta Brian Hackett, 2011年11月10日(2011年12月24日閲覧)。
型推論により Firefox Beta の JavaScript が高速化しました(上の記事の和訳)、2011年12月24日閲覧。 - ^ 一色政彦 (2011年4月22日). “Internet Explorer 9正式版レビュー”. @IT. 2011年12月24日閲覧。
- ^ “Mozilla、「Firefox 9」の正式版をリリース 「型推論」技術で45%高速に”. ITmedia (2011年12月21日). 2011年12月24日閲覧。
型推論
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/05 19:25 UTC 版)
Rustコンパイラは変数への代入時(variable = value)、変数の型を値の型に基づき型推論する。変数の宣言には必ずしも型を決定するための初期値を必要としない。変数の宣言時に初期値が与えられた場合は「変数の型」は「初期値の型」であると型推論がなされるが、初期値が与えられなかった場合は以降のブロックコード中のその変数へ値が初めて代入された時に「左辺の変数の型」は「右辺の代入する値の型」であると型推論がなされる。変数への代入が型不一致により失敗した場合にはコンパイル時にエラーを検出する。
※この「型推論」の解説は、「Rust (プログラミング言語)」の解説の一部です。» 「Rust (プログラミング言語)」の概要を見る
型推論
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/05 19:25 UTC 版)
Rustコンパイラは変数への代入時(variable = value)、変数の型を値の型に基づき型推論する。変数の宣言には必ずしも型を決定するための初期値を必要としない。変数の宣言時に初期値が与えられた場合は「変数の型」は「初期値の型」であると型推論がなされるが、初期値が与えられなかった場合は以降のブロックコード中のその変数へ値が初めて代入された時に「左辺の変数の型」は「右辺の代入する値の型」であると型推論がなされる。変数への代入が型不一致により失敗した場合にはコンパイル時にエラーを検出する。
※この「型推論」の解説は、「Rust (プログラミング言語)」の解説の一部です。» 「Rust (プログラミング言語)」の概要を見る
型推論
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/17 21:54 UTC 版)
C# 3.0でコンテキストキーワードvarによる限定された型推論が導入された。ローカル変数の宣言時に、型を右辺から推論できる。メソッド引数やフィールドには使えない。また、ラムダ式の戻り値および仮引数は型推論により決定される。ラムダ式の仮引数は型を省略することで型推論されるが、型推論が困難な場合には明示的に型を指定する。 Java 7で導入されたダイヤモンド演算子<>は宣言文の右辺ジェネリクスの型を省略できる程度のものでしかなかったが、Java 10ではC#同様に予約型名varによるローカル変数の型推論が導入された。Java 8で導入されたラムダ式では、仮引数の型を省略することで型推論されるが、さらにJava 11ではラムダ式の仮引数の型にvarを使用して型推論できるようになった。
※この「型推論」の解説は、「C SharpとJavaの比較」の解説の一部です。» 「C SharpとJavaの比較」の概要を見る
型推論
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/17 21:54 UTC 版)
C# 3.0でコンテキストキーワードvarによる限定された型推論が導入された。ローカル変数の宣言時に、型を右辺から推論できる。メソッド引数やフィールドには使えない。また、ラムダ式の戻り値および仮引数は型推論により決定される。ラムダ式の仮引数は型を省略することで型推論されるが、型推論が困難な場合には明示的に型を指定する。 Java 7で導入されたダイヤモンド演算子<>は宣言文の右辺ジェネリクスの型を省略できる程度のものでしかなかったが、Java 10ではC#同様に予約型名varによるローカル変数の型推論が導入された。Java 8で導入されたラムダ式では、仮引数の型を省略することで型推論されるが、さらにJava 11ではラムダ式の仮引数の型にvarを使用して型推論できるようになった。
※この「型推論」の解説は、「C SharpとJavaの比較」の解説の一部です。» 「C SharpとJavaの比較」の概要を見る
型推論
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/20 02:06 UTC 版)
Haskell では関数のデータ型を明示しなくても処理系が自動的に型を推論する。以下は型の宣言を省略し、本体のみを宣言した引数の平方を返す関数 square である。 square x = x * x この場合 square の型は型推論され、次のように明示的に型を宣言したのと同じになる。 square :: (Num a) => a -> asquare x = x * x この宣言は、「Numのインスタンスである a の型の値を引数にとり、a の型の値を返す」と読める。ここでは「*」演算子が適用可能な最も広い型である Num a が選択されており、整数や浮動小数点数、有理数のような Num のインスタンスであるあらゆる型の値を渡すことができる。外部に公開するような関数を定義するときは、型推論によって自動的に選択される最も広い型では適用可能な範囲が広すぎる場合もある。Integer のみを渡せるように制限する場合は、次のように明示的に型を宣言すればよい。 square :: Integer -> Integersquare x = x * x 型推論のため、Haskell は型安全でありながらほとんどの部分で型宣言を省略できる。なお、次のコードは型宣言が必要な例である。read は文字列をその文字列があらわすデータ型に変換する抽象化された関数である。 main = print (read "42") -- コンパイルエラー! このコードはコンパイルエラーになる。read は複数のインスタンスで実装されており、数値なら数値型に変換する read、リストならリストに変換する read というように型ごとに実装が存在する。Haskell の型は総て静的に決定されなければならない。このコード場合、プログラマは read :: String -> Int という型をもつ実装の read が選択されると期待しているであろうが、これはコンパイラによる静的な型検査では決定できない。つまり、Haskell コンパイラは read の返り値を受け取っている関数 print の型を検査し多数の実装の中から適切な read を選択しようとするが、print は Show のインスタンスが存在するあらゆる型を引数にとるため、型推論によっても read の型を一意に決定できない。これを解消するひとつの方法は、:: によって型を明示することである。 main = print ((read "42") :: Int) -- コンパイル成功!read の返り値を Int と明示している また、そもそも read の返り値を整数型しか取らない関数に与えていればあいまいさは生じず、型推論は成功する。 printIntOnly :: Int -> IO ()printIntOnly x = print xmain = printIntOnly (read "42") -- コンパイル成功! 他の言語、たとえば Java でこのような抽象的な関数を書こうとしても、Java では返り値の値の型によって関数を選択するようなことはできない(引数の型によって選択するメソッドのオーバーロードは存在する)。そのため、関数の実装ごとに別の名前をつけてプログラマに明示的に選択させて解決させることになる。この方法は簡潔でわかりやすいが、抽象性の高さに基づく再利用性という点では Haskell のような多相には劣ってしまう。
※この「型推論」の解説は、「Haskell」の解説の一部です。» 「Haskell」の概要を見る
型推論
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/05 19:25 UTC 版)
Rustコンパイラは変数への代入時(variable = value)、変数の型を値の型に基づき型推論する。変数の宣言には必ずしも型を決定するための初期値を必要としない。変数の宣言時に初期値が与えられた場合は「変数の型」は「初期値の型」であると型推論がなされるが、初期値が与えられなかった場合は以降のブロックコード中のその変数へ値が初めて代入された時に「左辺の変数の型」は「右辺の代入する値の型」であると型推論がなされる。変数への代入が型不一致により失敗した場合にはコンパイル時にエラーを検出する。
※この「型推論」の解説は、「Rust (プログラミング言語)」の解説の一部です。» 「Rust (プログラミング言語)」の概要を見る
「型推論」の例文・使い方・用例・文例
型推論と同じ種類の言葉
- 型推論のページへのリンク