[VB.NET] VB で Either 型(その2)

2014年6月11日

 http://ooltcloud.sakura.ne.jp/blog/201406/article_11235313.html を改良してみた。修正点は以下。

  • Either を Interface から Super Class に変えた。
  • Either に Match メソッドを追加した。
Class Either(Of A, B)
    Protected _right As A
    Protected _left As B

    Sub Match(Right As Action(Of A), Left As Action(Of B))
        Select Case Me.GetType
            Case GetType(Right(Of A, B))
                Right(_right)

            Case GetType(Left(Of A, B))
                Left(_left)

        End Select
    End Sub
End Class

Class Right(Of A, B)
    Inherits Either(Of A, B)

    Sub New(obj As A)
        _right = obj
    End Sub
End Class

Class Left(Of A, B)
    Inherits Either(Of A, B)

    Sub New(obj As B)
        _left = obj
    End Sub
End Class

 こうすることで使用側のコードは多少すっきりした…と思う(汗

Enum ErrorCode
    SyntaxError
End Enum
Module Module1

    Sub f(obj As Either(Of Tuple(Of Integer, Integer), ErrorCode))
        Dim isSucess = False
        Dim y As Double = 0

        obj.Match(Right:=Sub(x)
                             isSucess = True
                             y = x.Item1 + x.Item2
                         End Sub,
                   Left:=Sub(x)
                             isSucess = False
                             Console.WriteLine(x.ToString)
                         End Sub)

        If isSucess = False Then Exit Sub

        Console.WriteLine("{0}", y)
    End Sub

    Sub Main()
        Dim a = New Right(Of Tuple(Of Integer, Integer), ErrorCode)(Tuple.Create(100, 200))
        f(a)

        Dim b = New Left(Of Tuple(Of Integer, Integer), ErrorCode)(ErrorCode.SyntaxError)
        f(b)
    End Sub

End Module

 結果

300
SyntaxError
続行するには何かキーを押してください . . .

 まあこれだと使えないことはないか…な?(汗






タグ:
カテゴリー: Program, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org