佐々木屋

技術的なことから趣味まで色々書きます

型推論のススメ

以前型推論を説明しましたが、これが乱用されてしまうと問題になりそう、と思うのは正しい感覚です。ただし、時と場合によっては型推論は非常に有用ですので使える場面においては積極的に使っていこうじゃないか、というのが今回のテーマです。

Variant型ではない!

何度も言いますが、型推論はVariant型ではないということです。ちゃんと型が定まらない場合や型があっていない場合はコンパイルエラーとなり、何でも通るわけではありません。

var a = 10; //型推論でint型
var b = 1.5; //型推論でdouble型
a += b; //コンパイルエラー
Dim a = 10 '型推論でInteger型
Dim b = 1.5 '型推論でDouble型
a += b 'コンパイルエラー

変数にカーソルを合わせれば、ちゃんと型が決定されていることが分かります。
f:id:sasaki816:20190511204452j:plain
逆に言えば、型がちゃんと特定されている環境下でなければ型推論は働かないということになります。

DRY原則

プログラミング原則の一つにDRY原則というものがあります。恐らくプログラミングをしている人であれば誰でも一度は聞いたことがある言葉です。

詳しく書くと非常に長くなるので、補足は自分で書籍を探して読んでみてください。「Don't Repeat Yourself」の略で、簡単に言えば冗長性・重複性の排除です。これらが点在するようなものは、拡張縮小の手間になるだけでなく、バグの要因にもなるため出来るだけやめましょうね、というものです。これはプログラミングコードだけではなく、ドキュメントや仕様書など全般的な話です。

つまり、型推論とは冗長性の排除という点を考えれば理にかなっているわけです。

何を指標に使うか

例えば、以下のように宣言を簡素化できるのは言うまでもありません。

List<int> a = new List<int>() { 1, 2, 3 };
var b = new List<int>() { 1, 2, 3 };
Dim a As List(Of Integer) = New List(Of Integer) From {1, 2, 3}
Dim b = New List(Of Integer) From {1, 2, 3}

じゃあ、長い宣言はすべて型推論で書くのか?という極端な話にはならず、あくまで私個人のルールとして以下のように考えています。

  • 右辺をぱっと見で型が「明らかに」判別できる
  • 最低メソッド内、出来れば一つの構造化内で収まるようなより短いスコープの変数
  • int型やstring型などの組み込み型には使わない

意外と厳しそうに感じるかもしれませんが、プロラミングをしていると上記3つに当てはまる場面って結構多いです。