ほぼ全てのプログラミング言語には「データ型」という考え方があり、数値や文字列などそれぞれ区別されています。近年はLL言語(軽量プログラミング言語)というような、あまりデータ型を意識しなくても開発できるような言語が流行っていますが、内部的にはしっかりと区別して実装されているはずです。

データ型がある以上は、その型を判定するための方法が提供されています。ここでは、VB.Netについて記します。

下記のように、Object型のパラメータ x を受けて何らかの処理を行うメソッドがあります。VB.Netでは、見ての通りTypeOf <判定対象変数> Is <データ型>によってデータ型を判定することが出来ます。

このメソッドにはどんなデータ型の値でも渡すことが出来てしまうので、型判定無しでキャストしてしまうと、場合によっては例外が発生します。例えば、List型はどう転んでもInteger型に変換できません。

安全なキャストを保障するための、TypeOfによる事前の型判定だと見なせます。


    Sub Method(ByVal x As Object)

        If TypeOf x Is String Then
            Dim str = CType(x, String)
            '
            ' 何らかの処理
            '
        ElseIf TypeOf x Is Integer Then
            Dim int = CType(x, Integer)
            '
            ' 何らかの処理
            '
        ElseIf TypeOf x Is List(Of List(Of String)) Then
            Dim lists = CType(x, List(Of List(Of String)))
            '
            ' 何らかの処理
            '
        End If

    End Sub