はじめに
C#での一般的な処理について、従来の書き方と簡潔な書き方を比較しながら紹介します。
1. 条件による値の設定
従来の書き方
if (hasDetailView)
{
this.Width = 627;
}
else
{
this.Width = 527;
}
簡潔な書き方(三項演算子)
this.Width = hasDetailView ? 627 : 527;
2. nullチェックと値の代入
従来の書き方
string name;
if (user.Name != null)
{
name = user.Name;
}
else
{
name = "Guest";
}
簡潔な書き方(null合体演算子)
string name = user.Name ?? "Guest";
3. オブジェクトの階層的なnullチェック
従来の書き方
string city = null;
if (address != null)
{
if (address.Prefecture != null)
{
if (address.Prefecture.City != null)
{
city = address.Prefecture.City;
}
}
}
// デフォルト値を設定する場合
if (city == null)
{
city = "Unknown";
}
簡潔な書き方(null条件演算子)
// 通常の参照
string city = address?.Prefecture?.City;
// デフォルト値を設定する場合
string city = address?.Prefecture?.City ?? "Unknown";
4. 曜日による処理分岐
従来の書き方
string GetBusinessHours(DayOfWeek day)
{
switch (day)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
return "10:00-18:00";
default:
return "9:00-20:00";
}
}
簡潔な書き方(スイッチ式)
string GetBusinessHours(DayOfWeek day) => day switch
{
DayOfWeek.Saturday or DayOfWeek.Sunday => "10:00-18:00",
_ => "9:00-20:00"
};
5. リストの初期化と値の追加
従来の書き方
var products = new List<string>();
products.Add("Product A");
products.Add("Product B");
products.Add("Product C");
簡潔な書き方(コレクション初期化子)
var products = new List<string> { "Product A", "Product B", "Product C" };
6. メソッドの戻り値の計算
従来の書き方
public int Add(int a, int b)
{
return a + b;
}
簡潔な書き方(ラムダ式)
public int Add(int a, int b) => a + b;
7. 文字列の連結
従来の書き方
string message = "User: " + user.Name + ", Age: " + user.Age + " years old";
簡潔な書き方(文字列補間)
string message = $"User: {user.Name}, Age: {user.Age} years old";
8. 複数の戻り値の返却
従来の書き方
public class CalcResult
{
public int Sum { get; set; }
public double Average { get; set; }
}
public CalcResult Calculate(int[] numbers)
{
return new CalcResult
{
Sum = numbers.Sum(),
Average = numbers.Average()
};
}
簡潔な書き方(タプル)
public (int Sum, double Average) Calculate(int[] numbers)
=> (numbers.Sum(), numbers.Average());
9. ファイルの読み込み
従来の書き方
string content;
using (var reader = new StreamReader("file.txt"))
{
content = reader.ReadToEnd();
}
簡潔な書き方(using宣言)
using var reader = new StreamReader("file.txt");
string content = reader.ReadToEnd();
10. 型チェックと変換
従来の書き方
if (obj is string)
{
string str = (string)obj;
Console.WriteLine(str.Length);
}
簡潔な書き方(パターンマッチング)
if (obj is string str)
{
Console.WriteLine(str.Length);
}
11. 配列の一部取得
従来の書き方
var subset = array.Skip(2).Take(3).ToArray();
簡潔な書き方(範囲演算子)
var subset = array[2..5];
12. オブジェクトの初期化
従来の書き方
var user = new User();
user.Name = "John";
user.Age = 30;
user.Email = "john@example.com";
簡潔な書き方(オブジェクト初期化子)
var user = new User
{
Name = "John",
Age = 30,
Email = "john@example.com"
};
まとめ
この記事で紹介した簡潔な書き方には、以下のようなメリットがあります。
- コードの行数が減少
- 可読性の向上
- バグの混入リスクの低下
- メンテナンスの容易さ
ただし、チームの習熟度やプロジェクトの要件に応じて、適切な書き方を選択することが重要です。