型ありと型なしのミックス Javaは「全部、型を書く」で、Rubyは「全部、型を書かない」なんだけど、その中間のアプローチもある。 これには2種類あって、まず「基本は型ありで、省略可能」なもの。いわゆる型推論ですね。Haskellとか。 もう一つは、「基本は型なしで、付加可能」なもの。 Lisp系は一般的に変数に型がないけど、Common Lispはオプションで型を指定できることが仕様で規定されているらしい。 id:uehajさんが書いてらしたGroovyもそうだとか。 両者は似ているようで、決定的な違いがある。前者は型を省略した変数も型を持つ(型チェックされる)が、 後者は型を省略した変数には型がない(型チェックされない)。 というのを踏まえて 型の効果を見直してみる。 (A) コードを読むのに役立つ このための型は省略不能。(省略したら意味がないw) (B) 型チェックに役立つ (バグ