プログラミング/型推論

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

型推論は、プログラミング言語が変数や式の型を自動的に推論する機能です。

型推論をサポートしている言語の一覧は以下の通りです。

  • 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の引数xyの型を指定していません。しかし、コンパイラはNum型クラスのインスタンスである型を推論し、正しい結果を得ることができます。

OCaml[編集]

OCamlの型推論では、変数に対して型を明示的に指定する必要はありません。

OCamlの型推論の例
let my_function x y = x + y;;
この例では、my_functionint -> int -> int型であることが推論されます。int -> int -> intは、int型の引数を2つ取り、int型の結果を返す関数型を表します。

C++[編集]

C++では、autoキーワードを使用して、変数の型を推論することができます。

C++の型推論の例
auto my_variable = 42;
この例では、my_variableint型であることが推論されます。

Rust[編集]

Rustでは、変数の型を指定することなく、コンパイラが自動的に型を推論します。

Rustでの型推論の例
fn main() {
    let x = 1;
    let y = 2;
    let z = x + y;
    println!("{}", z);
}
このコードでは、変数xyの型を指定していませんが、コンパイラはそれらを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の引数xyの型を指定していませんが、コンパイラはそれらを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の引数xyの型を指定していますが、変数xyの型を指定していません。しかし、コンパイラはそれらをInt型と推論します。

Kotlin[編集]

Kotlinは静的型付け言語であり、変数の型を指定する必要がありますが、型推論によりコンパイラが自動的に型を推論することができます。

Kotlinでの型推論の例
val x = 10
このコードでは、変数x型を指定していません。しかし、コンパイラはそれらを整数型と推論します。

Swift[編集]

Swiftでは、変数に対して明示的に型を指定することができますが、通常は必要ありません。

Swiftの型推論の例
let my_variable = "Hello, world!"
この例では、my_variableString型であることが推論されます。

Go[編集]

Goでも、変数の型を明示的に指定することができますが、通常は必要ありません。

Goの型推論の例
my_variable := "Hello, world!"
この例では、my_variablestring型であることが推論されます。

Zig[編集]

Zigでも、変数の型を明示的に指定することができますが、通常は必要ありません。

Zigの型推論の例
const my_variable = 42;
この例では、my_variableconst int型であることが推論されます。const intは、int型の定数を表します。