はじめに
C#でプログラムを書いていると、データを扱うクラスをたくさん作ることになりますよね。
例えば、ユーザー情報を扱うクラスを作るとき、こんなコードを書いたことはありませんか?
public class User
{
public string Name { get; set; }
public string Email { get; set; }
}
C# 9.0で導入された「レコード型」を使うと、もっと便利にデータを扱えるようになります。
この記事では、レコード型の基本を初心者向けにわかりやすく整理しました!
目次
レコード型とは?
データを安全に扱うための新しい型
レコード型は、データを安全に扱うために設計された新しい型です。
通常のクラスと似ていますが、データの変更を防ぐ(イミュータブル=変更不可)という特徴があります。
なぜレコード型が必要なの?
例えば、以下のようなコードを見てみましょう。
// 通常のクラスの場合
public class UserClass
{
public string Name { get; set; }
public string Email { get; set; }
}
var user = new UserClass { Name = "田中太郎", Email = "tanaka@example.com" };
user.Name = "鈴木一郎"; // 後からデータを変更できてしまう
このコードの問題点は
- データが自由に変更できてしまう
- バグの原因になりやすい
- 複数の場所でデータが変更される可能性がある
レコード型を使うと、このような問題を防ぐことができます!
レコード型の基本的な使い方
基本的な書き方
レコード型は、とてもシンプルに書けます。
// レコード型の基本的な書き方
public record User(string Name, string Email);
// 使い方
var user = new User("田中太郎", "tanaka@example.com");
たったこれだけで
- データを格納するプロパティ
- コンストラクタ
- データを文字列で表示する機能
が自動的に作られます!
データの更新方法
レコード型では、with
というキーワードを使ってデータを更新します。
var user1 = new User("田中太郎", "tanaka@example.com");
var user2 = user1 with { Name = "鈴木一郎" }; // 新しいデータを作成
Console.WriteLine(user1); // User { Name = 田中太郎, Email = tanaka@example.com }
Console.WriteLine(user2); // User { Name = 鈴木一郎, Email = tanaka@example.com }
ポイント
- 元のデータ(user1)は変更されません
- 新しいデータ(user2)が作られます
- 安全にデータを扱えます!
レコード型のメリット
1. コードが短く書ける
通常のクラスだと、同じ機能を実現するのにたくさんのコードが必要です。
// 通常のクラスの場合(同じ機能を実現するコード)
public class UserClass
{
public string Name { get; }
public string Email { get; }
public UserClass(string name, string email)
{
Name = name;
Email = email;
}
}
// レコード型の場合
public record User(string Name, string Email); // たったこれだけ!
2. データの比較が簡単
レコード型は、データの中身を簡単に比較できます。
var user1 = new User("田中太郎", "tanaka@example.com");
var user2 = new User("田中太郎", "tanaka@example.com");
Console.WriteLine(user1 == user2); // True - 中身が同じなのでtrue
3. バグが起きにくい
データが勝手に変更されないので、思わぬバグを防げます。
実践的な例
ユーザー情報を管理する例
public record User(string Name, string Email);
public record AdminUser(string Name, string Email, string Role) : User(Name, Email);
// 使用例
var user = new User("田中太郎", "tanaka@example.com");
var admin = new AdminUser("管理者太郎", "admin@example.com", "システム管理者");
// メールアドレスを更新する場合
var updatedUser = user with { Email = "new.tanaka@example.com" };
商品データを管理する例
public record Product(
string Name,
int Price,
string Description
);
// 使用例
var product = new Product("スマートフォン", 50000, "最新モデル");
var discountProduct = product with { Price = 45000 }; // セール価格の商品を作成
よくある疑問
Q1: 既存のクラスは全部レコード型に書き換えるべき?
A1: いいえ、以下の場合はクラスを使うのがおすすめです。
- データを頻繁に更新する必要がある場合
- メソッドをたくさん持つ場合
- 複雑な処理を行う場合
Q2: レコード型のデータは一切変更できないの?
A2: init
を使うと、作成時のみ値を設定できます。
public record User
{
public string Name { get; init; }
public string Email { get; init; }
}
// 作成時は設定できる
var user = new User { Name = "田中太郎", Email = "tanakatt@123xxx.com" };
// 作成後は変更できない(コンパイルエラー)
// user.Name = "鈴木一郎";
Q3: パフォーマンスは大丈夫?
A3: 通常のクラスと比べても、ほとんど違いはありません。
むしろ、データの変更を防げるので、バグの防止につながります。
まとめ
- レコード型は、データを安全に扱うための新しい機能
- 簡単に書けて、データの変更を防げる
- 特にデータを保持するだけの用途に最適
これからC#でプログラミングを始める方は、ぜひレコード型を使ってみてください!安全で書きやすいコードが作れるようになりますよ。