Visual Basic 2005 ここが便利!

第2回 型指定されたコレクションを実現するジェネリック

株式会社ピーデー 川俣 晶
2005/03/23
Page1 Page2

まだあるメリット。IntelliSenseも強化!

 そういわれても、まだ半信半疑の読者も多いだろう。いちいち型を指定する手間も面倒であり、形式張った宣言を強制されない方が楽だと思う気持ちはよく分かる。しかし、ジェネリックを使い、型を指定するメリットはほかにもあるのだ。

 例えば、この上記のMainメソッドの中で、“list(0)”と打ってからピリオド記号を打ってみよう。すると、IntelliSenseが動作して、String型のメンバがリストされる。そこで“StartsWith”と入力したければ、それを選択するだけでよい。そのフルスペルをたたく必要はない。

 一方、ジェネリックを使わないサンプル・コードでは、そのようなサービスは行われない。統合開発環境が、“list(0)”の内容がString型であるということを理解していないので、String型のメンバをリストすることもあり得ないわけである。IntelliSenseが便利になるのは、ジェネリックと「Of String」という型指定のおかげである。

型指定はクセになる

 世のプログラミング言語は、型指定を強制する言語と、強制しない言語に分かれる。この2つは、それぞれを熱烈に支持する層があって、長い間宗教的な戦いが続いてきた。Visual Basicも、その2派の間で揺れてきた歴史がある。例えば、Visual Basicが型指定しなくても使えるプログラミング言語として有効に機能するようになったのは、Variant型が導入されたVisual Basic 2.0以降のことでしかない。

 もちろん、この2派は、どちらにも説得力のあるいい分があって、どちらが絶対に正しい、という結論に至るものではない。しかし、いまこの瞬間のVisual Basicプログラマという立場に限定し、そして「楽をするためならわずかな努力は惜しまない」という気持ちを持つならば、型指定を行う主義に転換する価値はある。型指定を行うわずかな手間を払えば、統合開発環境がその型指定情報を手掛かりに、さまざまなサービスを提供してくれるためである。つまり、いろいろな意味で、とても楽ができるのである。一度、型指定の快楽を知ってしまえば、これはクセになること間違いない。

付録:ジェネリックを使ったクラスの自作

 ジェネリックは使うのも簡単だが作るのも簡単である。以下にジェネリックを使って自作したクラスの記述例を示す。

Module Module1
  Sub Main()
    Dim t As New ValueStorage(Of DateTime)

    t.TheValue = New DateTime(2005, 4, 1, 12, 34, 56)
    Console.WriteLine(t.TheValue.ToUniversalTime)
  End Sub
End Module

Class ValueStorage(Of T)
  Private val As T

  Public Property TheValue() As T

    Get
      Return val
    End Get

    Set(ByVal value As T)
      val = value
    End Set

  End Property
End Class
ジェネリックを使って記述したクラス
クラスの宣言部分にある「Of T」により、ValueStorageクラス内の「T」の部分は、それを使用する側で指定された型(この場合にはDateTime型)に置き換えられる。

 ジェネリックを使うには、クラスの宣言で「Of T」のような記述を追加すればよい。ここで「T」というのは、実際に使用される際に、指定された型に置き換えられる仮の型である。

 この例では、Mainメソッドの中で、

Dim t As New ValueStorage(Of DateTime)

として宣言しているので、TはDateTime型に置き換えられる。しかし、もし「Of String」と宣言された場合には、TはString型に置き換えられることになる。つまりValueStorageクラスは、いろいろな型に対して汎用的に使えるということだ。

 ジェネリックを使っているクラスの実装では、仮の型であるTを、実際の型であるかのように使って記述すればよい。例えば、

Private val As T

のように記述して、その型の変数を宣言することができる。実際に使われるときには、この宣言は、

Private val As DateTime

であるかのように扱われることになる。

 このようにジェネリックは使うのも簡単だが作るのも簡単である。汎用的に多目的に使われるクラスを作る場合には非常に有益なので、Visual Basic 2005でそのようなクラスを作る可能性がある場合は覚えておくとよいだろう。End of Article


 INDEX
  Visual Basic 2005 ここが便利!
  第2回 型指定されたコレクションを実現するジェネリック
    1.ジェネリックを使ってコンパイル時にエラーを検出せよ!
  2.型指定はクセになる/付録:ジェネリックを使ったクラスの自作
 
インデックス・ページヘ  「Visual Basic 2005 ここが便利!」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH