みなさんは関数でOK/NGを返したいときはどうしていますか?あるプロジェクトではOK=Trueだと決めていても、isErrorみたいな関数ではNG=Trueにしたくなります。列挙体を使って定義しておくのが普通でしょうが、ちょっとこだわってResultクラスを作ってみました。
Public Class Result Class OKNG Public Shared Operator =(ByVal c1 As OKNG, ByVal c2 As OKNG) As Boolean If (c1 Is Nothing) OrElse (c2 Is Nothing) Then Return False End If Return (c1 Is c2) End Operator Public Shared Operator <>(ByVal c1 As OKNG, ByVal c2 As OKNG) As Boolean Return Not (c1 = c2) End Operator End Class Public Shared OK As New OKNG Public Shared NG As New OKNG End Class
このクラスを返す関数の書き方こうなります
Function CheckSomething() As Result.OKNG If ~~ここで判定~~ Then Return Result.OK Else Return Result.NG End If End Function
この関数を呼び出す方の書き方は以下のとおり
Sub Main() If CheckSomeThing = Result.OK Then ~~OK処理~~ Else ~~NG処理~~ End If End Sub
OKNGクラスは変数を持たない空のクラスです。オペレーション(=/<>)のみを定義しておくことであたかも値を持つ定数のような使い方ができます。
このようなちょっとしたクラスをまとめたdllを作っておくと、アプリケーション側でインポートしてすぐに使うことができるのでとても便利です。