VB.NETの匿名型を徹底解説!コレクションで使いこなす初心者ガイド
生徒
「先生、データをまとめて管理したいのですが、わざわざ新しい『クラス』という設計図を作るのが少し面倒に感じてしまいます。もっと手軽に、その場限りのデータセットを作る方法はありませんか?」
先生
「ありますよ!VB.NETには『匿名型(とくめいがた)』という、名前のない便利な型を作る機能があります。これを使えば、設計図なしでデータを一まとめにできるんです。」
生徒
「名前がないのに使えるんですか?なんだか不思議ですね。具体的にどうやって使うのか教えてください!」
先生
「匿名型は、特にコレクションと一緒に使うと非常に強力です。初心者の方でも分かりやすいように、基本からじっくり解説していきますね!」
1. 匿名型(Anonymous Types)とは?
VB.NETの匿名型とは、一言で言うと「名前を付けるまでもない、その場限りの使い捨てデータ型」のことです。通常、プログラミングで「名前」と「年齢」というデータを一つのセットにしたい場合、まず「人間クラス」という設計図を作る必要があります。
しかし、「この処理の中で一回だけ使いたいだけなのに、わざわざ新しいファイルを作って設計図を書くのは大変だな」と思うことがあります。そこで登場するのが匿名型です。 New Withというキーワードを使うことで、設計図なしにその場で「名前」や「値」を持ったデータの塊を生み出すことができます。
2. 匿名型の書き方の基本
まずは、一番シンプルな匿名型の作り方を見てみましょう。パソコンを触ったことがない方でも大丈夫です。以下のコードは、一人の「商品」の情報を、設計図なしで作る例です。
' 名前が「りんご」、価格が「150」というデータをその場で作ります
Dim product = New With { .Name = "りんご", .Price = 150 }
' 作ったデータの中身を使ってみましょう
Console.WriteLine("商品名: " & product.Name)
Console.WriteLine("価格: " & product.Price & "円")
実行結果は以下の通りです。
商品名: りんご
価格: 150円
ここでポイントなのは、productという箱の中に.Nameや.Priceという項目が自動で作られている点です。これが匿名型の魔法です。
3. コレクションと匿名型を組み合わせる理由
匿名型が本当の意味で輝くのは、コレクション(配列やリストなどのデータの集まり)と一緒に使う時です。 例えば、100人の顧客データが入った大きなリストから、「名前と電話番号だけ」を抜き出して新しいリストを作りたいとします。
この「抜き出した後の形」をわざわざ定義するのは面倒ですが、匿名型を使えば、必要な項目だけをサッとまとめたコレクションを簡単に作ることができます。 プログラムをスッキリさせ、開発のスピードを上げるための必須テクニックと言えるでしょう。
4. 配列の中で匿名型を使う方法
複数の匿名型をまとめて扱うには、配列の形にするのが一般的です。以下のサンプルコードでは、複数のユーザー情報を匿名型の配列として管理しています。
' 匿名型の配列を作成します
Dim users = {
New With { .ID = 1, .UserName = "田中" },
New With { .ID = 2, .UserName = "佐藤" },
New With { .ID = 3, .UserName = "鈴木" }
}
' ループ処理(For Each)で順番に表示してみましょう
For Each u In users
Console.WriteLine("ID:" & u.ID & " 名前:" & u.UserName)
Next
実行結果は以下の通りです。
ID:1 名前:田中
ID:2 名前:佐藤
ID:3 名前:鈴木
設計図がないのに、複数のデータをまるで「表」のように綺麗に管理できていることがわかりますね。
5. 匿名型のプロパティと型推論
匿名型を使う上で欠かせないのが型推論(かたすいろん)という仕組みです。 通常、変数を宣言するときには「これは数字です」「これは文字です」と教える必要がありますが、匿名型の場合はパソコン側が「あ、右側に入っているのは文字列だから、この項目は文字型だな」と自動的に判断してくれます。
これを実現しているのが、Dimの後に型を書かない書き方です。パソコンが賢く判断してくれるおかげで、私たちは「何という名前の項目に、何をいれるか」だけに集中すれば良いのです。
6. 読み取り専用(ReadOnly)という特性
匿名型で作られたデータには、一つ大切なルールがあります。それは、一度決めたら後から値を書き換えることができない(基本的には読み取り専用)という点です。
例えば、product.Price = 200 のように途中で値段を変更しようとするとエラーになります。もし値を変更したい場合は、匿名型を作る時に Key というキーワードを付けるか、素直に「クラス」を定義する必要があります。初心者のうちは、「匿名型は表示や計算に使うための使い捨てデータ」と覚えておくと安心です。
7. LINQ(リンク)との強力な連携
VB.NETの便利な機能である「LINQ」を使うとき、匿名型は最強の相棒になります。 LINQは大量のデータから条件に合うものを探す機能ですが、その結果を「名前と合計金額だけ」のような新しい形に整えるときに匿名型が使われます。
' 元になるデータリスト
Dim scores = New List(Of Integer) From { 80, 95, 60 }
' LINQを使って、点数とその評価をセットにした匿名型を作る
Dim report = From s In scores
Select New With { .Point = s, .IsPassed = (s >= 80) }
For Each r In report
Dim status As String = If(r.IsPassed, "合格", "不合格")
Console.WriteLine("点数: " & r.Point & " 判定: " & status)
Next
実行結果は以下の通りです。
点数: 80 判定: 合格
点数: 95 判定: 合格
点数: 60 判定: 不合格
このように、元のデータにはなかった「合格・不合格」という新しい項目を、その場で作って追加することができるのです。
8. 匿名型を使うときの注意点と限界
とても便利な匿名型ですが、何でもかんでもこれにすれば良いというわけではありません。 匿名型は「そのプログラムのファイル内」でしか型として認識されません。 別の関数にデータを渡したり、画面をまたいでデータを共有したりする場合には、匿名型は使えません。
大きなシステムを作る際、何度も繰り返し使うような重要なデータは、やはりしっかりと「クラス」という設計図を作ってあげるのが正解です。 「ちょっとした集計」や「一時的な表示用」には匿名型、「アプリの核となるデータ」にはクラス、という使い分けを意識しましょう。
9. 初心者が匿名型をマスターするコツ
まずは「New With { .項目名 = 値 }」という呪文を丸暗記して、実際に動かしてみることから始めましょう。 プログラミング未経験の方は、エラーが出ることを恐れずに、項目を増やしたり減らしたりして遊んでみてください。
パソコンの中でデータがどのようにまとまり、どのように取り出されるのかを体感することが、上達への最短距離です。 匿名型を使いこなせるようになると、書くべきコードの量が減り、プログラムがどんどん楽しくなっていきますよ!