はじめに
本記事は個人的に感じたnull合体代入演算子の使いどころについてまとめます。
null合体代入演算子とは
??=
で表現される演算子です。
オペランドの左辺の変数やプロパティなどがnullの場合に、右辺の値が左辺に代入されます。
詳細はこちらを参照してください。
個人的に感じた使いどころ
インスタンス作成後に別途初期化用のメソッドで初期化をする際に使えると感じました。
例えば、以下のように電話帳(TelephoneDirectory)クラスで初期化用のinitメソッドで連絡先一覧(Contacts)プロパティを初期化するケースを考えます。
Initメソッドは複数回呼び出される可能性があるため、連絡先一覧(Contacts)プロパティはnull(初期化されていない)の場合のみ初期化しています。
/// <summary>
/// 電話帳
/// </summary>
public class TelephoneDirectory
{
#region プロパティ
/// <summary>
/// 連絡先一覧
/// </summary>
public IList<Contact>? Contacts { get; private set; }
#endregion
#region 初期化
/// <summary>
/// 初期化する
/// </summary>
public void Init()
{
// 複数メソッドが呼び出された場合を想定して、連絡先一覧が初期化されていない場合のみ初期化する
if (Contacts == null)
{
Contacts = new List<Contact>();
}
}
#endregion
}
これをnull合体代入演算子を利用するとInitメソッドは以下のようになります。
if文を使わずに簡潔に記載できます。
/// <summary>
/// 初期化する
/// </summary>
public void Init()
{
// 複数メソッドが呼び出された場合を想定して、連絡先一覧が初期化されていない場合のみ初期化する
// null合体代入演算子
Contacts ??= new List<Contact>();
}
この例のようにnull合体代入演算子は初期化用のメソッド内での初期化処理で活用できると感じました。
まとめ
本記事では個人的に感じたnull合体代入演算子の使いどころについてまとめました。
初期化用のメソッド内での初期化処理を簡潔に記載する際に活用できると感じました。