型推論(Type Inference)

型推論(Type Inference) T
PR
PR

型推論(Type Inference)とは、データの種類を人が書かなくても、与えられた値から機械が推し量って決める仕組みのことです。書く手間を減らしながら、型による安全確認はそのまま働きます。

現実世界に例えると、型推論は荷物を見ただけで適した箱を選んでくれる係のようなものです。「これは割れ物です」と申告しなくても、中身を見て判断してくれます。こちらは中身を入れるだけで済みます。

型推論(Type Inference)図解

型推論(Type Inference)
※画像をクリックすると拡大表示します。

書き方の違い

項目 種類を書く場合 型推論を使う場合
記述 種類を明示する 値だけを書く
安全確認 効く 同じように効く
読みやすさ ひと目で分かる 値から読み取る
書き換えのとき 両方直す 値だけ直せばよい

どう決めているのか

やっていることは単純です。入れられた値が数値なら数値の種類、文字列なら文字列の種類、と最初の代入から判断します。関数であれば、返している値から戻り値の種類を導きます。人が読んで分かることを、機械も同じように読み取っているだけです。

動的型付けとは違う

ここは混同されやすい点です。型推論はあくまで静的な仕組みで、いったん決まった種類は後から変わりません。動かしている最中に種類が変わる動的型付けとは別物です。書き方が似ているため、同じものに見えてしまいます。

書き換えに強くなる

地味ですが効く利点です。種類を書いていないぶん、扱うデータを変えたときに直す箇所が減ります。明示していると、値と宣言の両方を直す必要があり、片方を忘れて食い違うことも起こります。

あえて書いたほうがよい場面

常に省くのが良いわけではありません。関数が外部に公開する入口や戻り値は、明示しておくほうが読み手に親切です。中を読まなくても使い方が分かるためで、多くの現場では「内部は推論に任せ、境目は明示する」という線引きが取られます。

読みにくくなることもある

短所も知っておきましょう。複雑な処理の結果を受け取る変数では、何が入っているのか一目では分からなくなります。開発用のソフトにカーソルを合わせれば表示されますが、印刷した紙や画面上の差分では読み取れません。

どの言語で使えるか

いまや珍しい機能ではありません。C#、Java、Kotlin、Swift、Go、Rust、TypeScriptなど、近年の言語ではほぼ標準で備わっています。書き方は言語ごとに違いますが、考え方はどれも同じです。

推論できないこともある

限界もあります。最初に空の入れ物を用意する場合など、手がかりが無ければ機械にも判断できません。そうした場面では、はっきりと種類を書くよう求められます。書かずに済むのは、あくまで判断材料があるときだけです。

あわせて知っておきたい用語

  • 静的型付け:
    動かす前に種類を決めて確かめる方式です。
  • TypeScript:
    型推論を備えた、JavaScript系の言語です。
  • 変数:
    データを入れておくための名前付きの入れ物です。
  • コンパイル:
    実行できる形へ翻訳する作業です。

コメント

タイトルとURLをコピーしました