型推論とは、モテるイマドキプログラミング言語の必須アイテムである。
C#での少し極端な例だが、こんな感じに楽できることである。
// C#
// (using System; と using System.Collections.Generic; が書かれているとする)
Dictionary<String, List<DateTime>> myDic = new Dictionary<String, List<DateTime>>()
// ↓こうなる
var myDic = new Dictionary<String, List<DateTime>>()
これに限らず、
var num = 42;
var ratio = 0.25f;
var name = "Name";
var result = isCheckFunction();
のようなところでも、全部varと書けばそれぞれ勝手に適切な記述をしたものとして判断してくれる仕組みである。
最近ではC#3.0(におけるvar)やC++11(におけるauto)で採用されたが、HaskellやMLといった言語では初期から備わっていた機能である。
「整数と整数足したら整数に決まってんじゃん」「文字列結合したら文字列できるに決まってんじゃん」「材料見れば結果の型は分かるのにintだのstringだのの記述を要求するなんてバカなの?死ぬの?」・・・とゆー、プログラマの怠惰精神に応えて、型を周囲のコードから自動的に決定してしまおうというのが型推論である。
一般的に静的型付けのプログラミング言語では、変数に全て型が付いていて他の型のオブジェクトは代入できないが、それがために一々型修飾が必要でプログラムが煩雑になりがちなのが難点である。型推論が使えると変数型を勝手に決めてくれるのでとにかく書くのが楽になるし、動的型付け言語と違ってコンパイル時に間違いが検出されるという点は型推論を行っても変わらない。また大抵はコードが読みやすくなるのもよいところ。
一口に型推論といっても様々である。C#やC++のように変数の初期化や返り値などに限定した型推論から、Rustのように変数がどのように使われているかも型推論の材料とするもの、OCamlやHaskellなどのようにプログラム全体から型を決定するものまで存在する。
静的型付け関数型言語では伝統的に使われてきたが、最近はその他の言語にも導入が進んでおり、動的型付け言語でもJITの最適化に型推論を用いる事例があるようだ。一番喜んでるのはクソ長いシグネチャがauto一発になったC++屋のような気もする。
掲示板
1 ななしのよっしん
2014/06/22(日) 14:36:26 ID: 1tDYMbZLjP
>キャストが許されるのは小学生までだよね~。
↑型推論の話題で何でいきなり「キャスト」とか出てくるのかよくわからないのだが・・・キャストが型推論の代用だったわけでもないし
2 ななしのよっしん
2015/10/18(日) 14:45:47 ID: 2YcpJNqmjb
型変換のためにキャストしろってことだろ
よくわからないって言葉がよくわからないんだけど
3 ななしのよっしん
2016/01/31(日) 14:36:28 ID: DVoVy8SshG
昔: 入れるものごとに適切な器を指示しろよ
今: 入れるものがわかってるんだから器の種類も機械的に判断してくれよ
ちなみに関数型言語で型推論が強いのは
代入(変数の使い回し)に否定的で型と値が緊密に紐付いているから
提供: ryo23
提供: みそ吉
提供: 告発者
提供: 猫葉ねる
提供: のらきち
急上昇ワード改
最終更新:2025/03/28(金) 15:00
最終更新:2025/03/28(金) 14:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。