C#のNull合算演算子を理解する
C#のNULL合体演算子(??)により、開発者はNULLチェックロジックを簡素化し、コードの冗長性を減らし、可読性を向上させることができます。 長い if-else 条件を書く代わりに、この演算子は null に遭遇したときにフォールバック値を割り当てる簡潔な方法を提供します。 この記事では、Gerald Versluis 氏のビデオ"Understanding C# Null Coalescing Operator (???)"に沿って、NULL 結合演算子について詳しく説明します。 および??=)"このビデオの重要な部分を分解し、ジェラルドがこの便利なC#機能をどのように実演しているかを分析します。
はじめに
ビデオの冒頭でジェラルドは、ヌルチェックに必要なコード行数を大幅に削減するC#の強力な機能として、ヌル合体演算子を紹介します。 彼は、この演算子が条件チェックを簡素化し、コードをより読みやすくすることを強調している。 その利点を説明するために、ジェラルドは、ヌル合体演算子のさまざまな使用例を実装し、説明するサンプル・アプリケーションを順を追って説明します。
サンプルアプリの概要
ジェラルドは、簡単なコンソール・アプリケーションをセットアップすることから始めます。 以前のビデオでは、デモにtry.dot.netのウェブサイトを使用していたが、バージョンの制限(C# 7のみをサポート)のため、Visual Studio for Macに切り替えたと述べている。 また、Visual Studio for Windowsでも使用できることを保証しています。
デモの準備として、ジェラルドは単一のPersonクラスを作成します。
public class Person
{
public string Name { get; set; }
}public class Person
{
public string Name { get; set; }
}次に、このクラスのインスタンスを初期化して、NULL 結合演算子が実際のシナリオでどのように機能するかを紹介します。
NullチェックをNull-Coalescing演算子(?
ジェラルドは、ヌルチェック・ロジックを単純化するために、ヌル合体演算子(? 彼はNameプロパティにnullを割り当て、次に??を使用します。 フォールバック値を提供します:
var name = person.Name ?? "Gerald";var name = person.Name ?? "Gerald";ジェラルドは、この演算子を使う前は、開発者は if 文を使っていたと説明します:
string name;
if (person.Name == null)
{
name = "Gerald";
}
else
{
name = person.Name;
}string name;
if (person.Name == null)
{
name = "Gerald";
}
else
{
name = person.Name;
}このロジックを??を使用することで1行に簡略化します。person.Nameがnullの場合、"Gerald"が割り当てられます。 それ以外の場合は、person.Nameはその値を保持します。 彼はプログラムを実行し、出力が正しいことを確認します。
例外をスローするための Null-Coalescing
次に、ジェラルドは、NULL合体演算子を使って例外を投げるという、別の使用例を探ります。 フォールバック値を提供する代わりに、nullに遭遇したときに例外を投げる方法を示しています:
var name = person.Name ?? throw new ArgumentNullException(nameof(person.Name), "Name cannot be null");var name = person.Name ?? throw new ArgumentNullException(nameof(person.Name), "Name cannot be null");ジェラルドは、nullが許されるべきではないメソッドのパラメータやプロパティを扱うときに、これが特に役立つことを強調しています。 彼は、この機能は、プロジェクトの設定に応じて、C# 7または8で導入されたと説明しています。 ArgumentNullExceptionが発生し、意図しないnull参照を効果的に防ぎます。
ヌル合体複合代入 (??=)
ジェラルドは、デフォルト値を割り当てるためのさらに合理的な方法を提供するNULL合体複合代入(??=)演算子について説明します。 書く代わりに
if (person.Name == null)
{
person.Name = "Gerald";
}if (person.Name == null)
{
person.Name = "Gerald";
}彼はこれを次のように単純化しています:
person.Name ??= "Gerald";person.Name ??= "Gerald";ジェラルドは、?=は左側のオペランドがNULLの場合にのみ指定された値を代入すると説明しています。 もしperson.Nameがすでに値を持っている場合、それは変更されません。 この演算子は、フィールドを初期化したり、変数がNULLのままにならないようにしたりするのに特に便利です。
Null条件演算子との結合
最後のセクションでは、ジェラルドがNULL合体演算子とNULL条件演算子(?) null条件演算子を使用することで、NullReferenceExceptionを引き起こすことなく安全にプロパティにアクセスできます。 例を挙げてみましょう:
var length = person?.Name?.Length ?? 0;var length = person?.Name?.Length ?? 0;ジェラルドは、Nameがnullの場合、結果は例外を投げる代わりに0にデフォルトすることが保証されると説明します。 この組み合わせは、NULL可能な参照型や複雑なオブジェクト階層を扱うときに便利です。
結論
ビデオを通して、Gerald Versluisは、NULL合体演算子(??)とNULL合体複合代入(??=)の威力を効果的に説明しています。 これらの演算子が従来のヌルチェックをどのように置き換え、コードをより簡潔で読みやすいものにするかを示している。 これらの機能を活用することで、開発者はよりクリーンで効率的なC#アプリケーションを書くことができます。
これらの概念を実際に見てみたい方は、Gerald Versluisによる"Understanding C# Null Coalescing Operator (????) "のビデオをご覧ください。 と?)

