具体例による説明
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/22 01:55 UTC 版)
この節では型推論の構文解析理論には踏み込んでいない。 ほとんどの言語においては、関数の仮引数および戻り値、演算子のオペランドおよび結果、変数、そしてそれらから成る式は、各々が保持するデータの種類を表す型を持つ。構文上で明らかな名前を持つ型による区別をしない言語であっても、内部的にはなんらかの型を持っていて区別しているケースが多い。実行時に型が決まる言語を動的型付けの言語という。一方、コンパイル時に型が決まる言語を静的型付けの言語という。静的型付けの言語において、関数の仮引数および戻り値の型や変数の型は、通常は明示的に記述する必要がある。例えば、次はC言語の例である。 int addone(int x) { int result; result = x + 1; return result;} 関数定義の最初の行int addone(int x)では、関数addoneは整数一つを入力引数として受け取り、整数を出力結果として返す、と宣言している。int result;の行では、ローカル変数resultが整数型であることを宣言している。 上記の例にほぼ1対1で対応するコードを、F#を使って記述すると下記のようになる。 let addone (x : int) : int = let result : int = x + 1 result しかしF#は型推論の機能を持っているため、次のように書くこともできる。 let addone x = let result = x + 1 result このF#の例において、 2項演算子+の左オペランドと右オペランドの型は同じであり、演算結果は同じ型を返す。 という仕様であり、右オペランドには整数リテラル1が記述されていることから、左オペランドの変数xすなわち関数の引数xも同じ整数型であるということが推論される。これにより、式x + 1の値が整数型であることが型推論される。故にresultの型は整数であり、addone関数の戻り値の型が整数であることがわかる。 let y1 = addone 3let y2 = addone 3.0 // double 型の値を渡すと、型の不一致によりコンパイルエラー。let y3 = addone 3y // sbyte 型の値を渡すと、型の不一致によりコンパイルエラー。 なお、型推論はあくまで暗黙の型付けがなされるにすぎない。型推論によりコンパイル時に確定した型は不変である。
※この「具体例による説明」の解説は、「型推論」の解説の一部です。
「具体例による説明」を含む「型推論」の記事については、「型推論」の概要を参照ください。
- 具体例による説明のページへのリンク