VB のたまご

作成日: 2015/12/03, 更新日: 2015/12/03


型推論を利用して、コード量を減らしてスッキリさせよう

預言者は突然に。

  •  突然ですが、VB2008 から、型推論が使えるようになりました。
  • 型推論とは、コンパイラが初期値を参考にして、対応する型を推測して決定してくれる機能です。ただし機能する範囲は、 プロシージャレベル(メソッド内、プロパティ内、等)です。
  •  型推論を利用すると、文字数が少なくなるので見通しが良くなります。変数の型を書かないのでタイピング入力が楽になるのと、 推測された型が、Object 型ではなく厳密に指定された型になっているので、キャストを意識しなくてもよく、今まで通りに扱うことができます。
  • Dim s1 = "hello"
    Dim d1 = New Date(2015, 1, 1)
    

  •  ただし、型が書かれていないということが、困ることがあります。基本的には、パッと見で理解できない場合は、 しっかりと型名を書くべきかなと思います。いちいち変数名をマウスオーバーして、何の型か見るのは手間になってしまいますからね。
  • Dim s2 = "hello"          ' 分かる
    Dim s3 = New Button       ' 分かる
    Dim s4 = Me.GetDataSet()  ' DataSet かな?
    Dim s5 = Me.GetData()     ' 無理です
    

スポンサーリンク


いや、うちらは予言は当てにしないんで。>え?

  •  例えば、ジェネリックデリゲートラムダ式で書いた変数があるとします。
  • Dim d1 As Func(Of Integer, Integer, Integer) = New Func(Of Integer, Integer, Integer)(Function(i1 As Integer, i2 As Integer) i1 + i2)
    

  •  あー、これは書きづらいし見づらいですね。そこでどうするかというと、こうですよ。
  • Dim d1 As New Func(Of Integer, Integer, Integer)(Function(i1 As Integer, i2 As Integer) i1 + i2)
    

  •  うん、これなら型の重複が無くて見やすいです。

スポンサーリンク


預言者さんの反論

  •  型推論ならこう書けます。
  • Dim d3 = New Func(Of Integer, Integer, Integer)(Function(i1 As Integer, i2 As Integer) i1 + i2)
    

  •  As の2文字をさらに = の1文字に縮めることができます。 また、As New という構文だと、どこまでが変数でどこからが初期値なのかが、パッと見て分かりづらくないですか?

  •  うーん、2文字も1文字もたいして変わらないと思うけど、後者は、 何回も使っているから見慣れてしまって、見づらいと思ったことは最近は無いけど、今見てみるとそうかもしれないね。

  •  ここまで言っておいてなんですが、型推論は必ず使わなければダメ、というルールは無いので、As New でも良いですよ。 ただ、LINQ を使う場合は、型推論を使わないと LINQ の結果を受け取れないんです。だから LINQ を使うのであれば、 型推論を利用しなければいけません。それに、そう悪い物じゃないですよ、私。いい仕事しますよ。

  •  あー、そうなんだ。そこまで言うなら、今後は使ってみようかな。

  •  最後までこの記事を読んでいただき、ありがとうございました。

  • スポンサーリンク