最終更新日 2006 年 6 月 8 日
サンプル コードのダウンロード (vbmigtips_IsTrueOperator.msi, 491 KB)
※ このサンプルをインストールするには Visual Studio 2005 が必要です。
Visual Basic 2005 では、.NET Framework 2.0 がサポートされたことにより、様々な機能が追加されました。そこで今回は、新たに追加された、IsTrue 演算子と IsFalse 演算子について紹介します。
IsTrue 演算子と IsFalse 演算子は、コードから明示的に呼び出すことができないため、クラスや構造体で定義する必要があります。また、IsTrue と IsFalse はセットで使用されるため、一方を定義する場合、もう一方も定義する必要があります。
IsTrue 演算子と IsFalse 演算子は、構造体やクラスでオーバーロードすることにより、オブジェクトのエラーチェックを効率よく行うことができます。そこで今回は、IsTrue 演算子と IsFalse 演算子をオーバーロードした ArrayList クラスと、オーバーロードをしていない ArrayList クラスの比較を行います。図1 の[エラーチェック開始]ボタンをクリックすることで、各変数のエラーチェックを行い、その結果を ListBox に表示するアプリケーションを作成します。
図1
まず、ArrayList を継承した myArrayList クラスを作成し、Operator ステートメントを使い、IsTrue 演算子と IsFalse 演算子を定義します。実装コードは以下のとおりです。
Public Class MyArrayList
Inherits ArrayList
Public Shared Operator IsTrue(ByVal myarraylist As MyArrayList) As Boolean
Return myarraylist IsNot Nothing AndAlso myarraylist.Count > 0
End Operator
Public Shared Operator IsFalse(ByVal myarraylist As MyArrayList) As Boolean
Return Not (myarraylist IsNot Nothing AndAlso myarraylist.Count > 0)
End Operator
End Class
リスト1
上記 (リスト1) の 「Inherits ArrayList」では、ArrayList に IsTrue 演算子と IsFalse 演算子をオーバーロードしたオリジナルのクラスを作成するため、ArrayList クラスを継承します。「Return myarraylist IsNot Nothing AndAlso myarraylist.Count > 0」では、変数 myarraylist が Nothing でなく、且つ、myarraylist に格納されている要素が1つ以上ある場合、「True」を返し、それ以外の場合は、「False」を返します。「Return Not (myarraylist IsNot Nothing AndAlso myarraylist.Count > 0)」では、変数 myarraylist が Nothing でなく、且つ、myarraylist に格納されている要素が1つ以上ある場合、「False」を返し、それ以外は「True」を返します。
次に、図1 の[エラーチェック開始]ボタンをクリックしたときの処理を実装します。まず、オーバーロードをしていない ArrayList クラスによる変数の宣言、および、データ型のエラーチェックを実装します。実装コードは以下のとおりです。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As ArrayList = Nothing
Dim b As ArrayList = New ArrayList
b.Add("test1")
b.Add("test2")
If a IsNot Nothing Then
If a.Count > 0 Then
ListBox1.Items.Clear()
ListBox1.Items.AddRange(a.ToArray)
Else
ListBox1.Items.Clear()
ListBox1.Items.Add("error")
End If
Else
ListBox1.Items.Clear()
ListBox1.Items.Add("error")
End If
If b IsNot Nothing Then
If b.Count > 0 Then
ListBox2.Items.Clear()
ListBox2.Items.AddRange(b.ToArray)
Else
ListBox2.Items.Clear()
ListBox2.Items.Add("error")
End If
Else
ListBox2.Items.Clear()
ListBox2.Items.Add("error")
End If
Button1.Text = "チェック完了"
End Sub リスト2
上記 (リスト2) では、ArryaList 型の変数が Nothing ではなく、且つ、ArryaList 型の変数に格納されている要素が1つ以上ある場合、変数に格納されているデータを ListBox に表示します。それ以外の場合は、「error」と表示します。
次に、IsTrue 演算子と IsFalse 演算子をオーバーロードした myArrayList クラスによる変数の宣言、および、データ型のエラーチェックを実装します。実装コードは以下のとおりです (リスト2 に次のコードを追加してください) 。
Dim c As myArrayList = Nothing
Dim d As myArrayList = New MyArrayList
d.Add("test3")
d.Add("test4")
If c Then
ListBox3.Items.Clear()
ListBox3.Items.AddRange(c.ToArray)
Else
ListBox3.Items.Clear()
ListBox3.Items.Add("error")
End If
If d Then
ListBox4.Items.Clear()
ListBox4.Items.AddRange(d.ToArray)
Else
ListBox4.Items.Clear()
ListBox4.Items.Add("error")
End If リスト3
上記 (リスト3) では、MyArrayList クラスに返された値が「True」の場合、変数に格納されているデータを ListBox に表示し、「False」の場合は、「error」と表示します。
以上の実装を行い、[エラーチェック開始]ボタンをクリックすると、図2 のように結果が表示されます。
図2
リスト2 とリスト3 を比較してわかるように、IsTrue 演算子とIsFalse 演算子をクラスや構造体でオーバーロードすることで、よりわかりやすくコードの記述ができるようになりました。