プログラミング/型推論
< プログラミング
型推論は、プログラミング言語が変数や式の型を自動的に推論する機能です。
型推論をサポートしている言語の一覧は以下の通りです。
- ML系言語:OCaml、F#、SML、Standard ML、Haskell
- 関数型言語:Scala、Erlang、Clojure、Racket、Scheme、Rust
- 静的型付け言語:Swift、Kotlin、C#、TypeScript、Java、Go
- ダイナミック型付け言語:Python、Ruby、JavaScript
ただし、各言語で型推論がサポートされている機能や文法が異なる場合があります。また、一部の言語では型推論がオプションであったり、一部の機能に限定されている場合もあります。
以下は、型推論を行う代表的なプログラミング言語とその文法の例です。
Hascell[編集]
Haskellでは、関数の引数や戻り値の型を指定することなく、コンパイラが自動的に型を推論します。
- Haskellの型推論の例
add :: Num a => a -> a -> a add x y = x + y main :: IO () main = do let x = 1 y = 2 print (add x y)
- このコードでは、関数
add
の引数x
とy
の型を指定していません。しかし、コンパイラはNum
型クラスのインスタンスである型を推論し、正しい結果を得ることができます。
OCaml[編集]
OCamlの型推論では、変数に対して型を明示的に指定する必要はありません。
- OCamlの型推論の例
let my_function x y = x + y;;
- この例では、
my_function
はint -> int -> int
型であることが推論されます。int -> int -> int
は、int
型の引数を2つ取り、int
型の結果を返す関数型を表します。
C++[編集]
C++では、auto
キーワードを使用して、変数の型を推論することができます。
- C++の型推論の例
auto my_variable = 42;
- この例では、
my_variable
はint
型であることが推論されます。
Rust[編集]
Rustでは、変数の型を指定することなく、コンパイラが自動的に型を推論します。
- Rustでの型推論の例
fn main() { let x = 1; let y = 2; let z = x + y; println!("{}", z); }
- このコードでは、変数
x
とy
の型を指定していませんが、コンパイラはそれらをi32
型と推論します。
TypeScript[編集]
TypeScriptは静的型付け言語であり、変数の型を指定する必要がありますが、型推論によりコンパイラが自動的に型を推論することができます。
- TypeScriptでの型推論の例
function add(x, y) { return x + y; } const x = 1; const y = 2; const z = add(x, y); console.log(z);
- このコードでは、関数
add
の引数x
とy
の型を指定していませんが、コンパイラはそれらをnumber
型と推論します。
Scala[編集]
Scalaは静的型付け言語であり、変数の型を指定する必要がありますが、型推論によりコンパイラが自動的に型を推論することができます。
- Scalaでの型推論の例
def add(x: Int, y: Int): Int = x + y val x = 1 val y = 2 val z = add(x, y) println(z)
- このコードでは、関数
add
の引数x
とy
の型を指定していますが、変数x
とy
の型を指定していません。しかし、コンパイラはそれらをInt
型と推論します。
Kotlin[編集]
Kotlinは静的型付け言語であり、変数の型を指定する必要がありますが、型推論によりコンパイラが自動的に型を推論することができます。
- Kotlinでの型推論の例
val x = 10
- このコードでは、変数
x
型を指定していません。しかし、コンパイラはそれらを整数型と推論します。
Swift[編集]
Swiftでは、変数に対して明示的に型を指定することができますが、通常は必要ありません。
- Swiftの型推論の例
let my_variable = "Hello, world!"
- この例では、
my_variable
はString
型であることが推論されます。
Go[編集]
Goでも、変数の型を明示的に指定することができますが、通常は必要ありません。
- Goの型推論の例
my_variable := "Hello, world!"
- この例では、
my_variable
はstring
型であることが推論されます。
Zig[編集]
Zigでも、変数の型を明示的に指定することができますが、通常は必要ありません。
- Zigの型推論の例
const my_variable = 42;
- この例では、
my_variable
はconst int
型であることが推論されます。const int
は、int
型の定数を表します。