どうも!リョクちゃです。
今回は、以前にPython記事で紹介したTuple(タプル型)について、
VB.Netで使うにはどうしたらいいかを例を交えて紹介していきます。
※ 今回はフォームアプリケーションを使用した例の紹介ではありません。
書き方などの紹介になります。
ちなみにPythonでタプルはこちらです。
前回はこちら
目次
そもそもタプル型って?
リストや辞書型といった複数の要素を管理するデータ型の一種に分類されます。
Pythonでは、シーケンス型?といわれていましたね。
特徴としては、
- 要素を追加・削除・変更(更新)ができない。
→ イミュータブルな型といわれています。 - リストに比べて高速な演算が可能
- 辞書やリストと組み合わせて使用できる。
といった特徴が挙げられます。
Pythonでは……?
タプルを以下の様に表すことが出来ました。
例)
1 |
x = ('りんご', 'ばなな', 1) |
VB.Netでは……?
一方でVBでは、以下の様にして表すことが出来ます。
例) Tuple(“りんご”, “ばなな”, “かぼちゃ”)
変数として宣言する際は、
1 |
Dim 変数名 As New Tuple(Of 型名, [型名2],[型名3],[型名n])(値1, 値2, 値3, ……, 値N) |
[]は省略可能、Tuple型に何個値を含ませるかで任意になります。
※ 後での追加はできないのであらかじめ入れておく必要があります。
例)
1 |
Dim tplTest As New Tuple(Of String, String, String)("りんご", "ばなな", "かぼちゃ") |
と書くことで宣言・インスタンス化ができます。
ちなみに、VB.Netでは、NetFrameWorkのバージョン4.0からサポートされています。
Tupleで宣言した値を取り出す
宣言したTuple変数から値を取り出すには、
以下のように書くことで取り出すことができます。
→ 値1に割り当てた値を取り出せることができます。
例)
1 2 3 4 |
Console.WriteLine(tplTest.Item1) ' 出力 ' りんご |
イミュータブルな型だけど……
タプルの特徴として、宣言したタプルに対して、値の変更や削除、更新はできない
イミュータブルな型だと書きましたが、以下のようなことは行えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Class TestTuple Sub Main() Dim tplTest As New Tuple(Of String, String, String)("りんご", "ばなな", "かぼちゃ") Console.WriteLine(tplTest.Item1) Console.WriteLine(tplTest.Item2) Console.WriteLine(tplTest.Item3) tplTest = New Tuple(Of String, String, String)("みかん", "ぶどう", "めろん") Console.WriteLine(tplTest.Item1) Console.WriteLine(tplTest.Item2) Console.WriteLine(tplTest.Item3) End Sub End Class |
ここでは、1回目のtplTestと2回目のtplTestは同じようで別のTuple変数になります。
こうした変更、すなわり新たなTupleに置き換えることは可能です。
一方で以下のような変更はNG、エラーとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Module modTuple Sub Main() Dim tplTest As New Tuple(Of String, String, String)("りんご", "ばなな", "かぼちゃ") Console.WriteLine(tplTest.Item1) Console.WriteLine(tplTest.Item2) Console.WriteLine(tplTest.Item3) tplTest.Item1 = "ぶどう" End Sub End Module |
tplTest.Item1 = “ぶどう”と記述することで、
既にあるItem1の”りんご”を新たに”ぶどう”として変更しようとしています。
これはItem1がReadOnlyなプロパティであることから、
読み込み専用となっているため、エラーとなります。
これは先ほども書きましたが、Tupleがイミュータブルな型だからです。
Tupleの応用例
Tupleは辞書型と組み合わせるとその効力を発揮するといわれます。
ここで辞書型を使ってTupleを組み合わせた例を紹介します。
例えば、ある学校の生徒の身長と体重、クラス名を各生徒の名前ごとに
管理するアプリケーションがあった場合、
このアプリケーションから各生徒の身長を表示するといった処理を行うとします。
※ 例では、同名はこの学校には存在しないものとします。
こうした処理を記述する上で辞書型とTuple型の組み合わせが効果的です。
以下、この処理の一例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Class TestTuple Sub Main() ' 各生徒のパラメータ変数をTupleとして準備します。 Dim student1 = New Tuple(Of Integer, Integer, String)(162, 48, "A組") Dim student2 = New Tuple(Of Integer, Integer, String)(187, 70, "B組") Dim student3 = New Tuple(Of Integer, Integer, String)(168, 53, "A組") ' 辞書変数を各生徒の指名ごとに準備します。 Dim dictSchool As New Dictionary(Of String, Tuple(Of Integer, Integer, String)) dictSchool("佐藤 綾香") = student1 dictSchool("田中 太郎") = student2 dictSchool("軽井沢 公子") = student3 ' 各生徒の身長を出力ウィンドウに表示していきます。 Console.WriteLine("各生徒の身長は") ' KeyValuePairとすることで、それぞれKeyとValueを取り出せるようにしています。 For Each dictStudent As KeyValuePair(Of String, Tuple(Of Integer, Integer, String)) In dictSchool Console.WriteLine(dictStudent.Key & "は" & dictStudent.Value.Item1 & "Cmです。") Next dictStudent ' 出力 ' 各生徒の身長は ' 佐藤 綾香は162Cmです。 ' 田中 太郎は187Cmです。 ' 軽井沢 公子は168Cmです。 End Sub End Class |
こんな使い方もあるんだ、とイメージだけでもつかんでもらえたらなと思います。
まとめ
今回はVB.NetでもPython同様にTupleがあったので使ってみました。
使い方や応用例も併せて解説していきました。
ただ、.NetFrameWork4.0からのサポートになります。
ぜひ、初学者の参考や今後のアプリケーション開発の糧にしていただけたらなと思います。
最後までご覧いただきありがとうございます。
・筆者オススメVB.Net書籍(2020年版)
VisualBasic2019パーフェクトマスター (Perfect Master)
現場ですぐに使える! Visual Basic 2019 逆引き大全 500の極意
かんたん Visual Basic [改訂2版] (プログラミングの教科書)
作って覚えるVisual Basic 2019 デスクトップアプリ入門