【Apex】ナビゲーション演算子によるNullPointerException回避


今回はSalesforceのWinter21でリリースされるナビゲーション演算子についての簡単に使い方をまとめました。

ナビゲーション演算子とは

Winter21でリリースされた機能として、ナビゲーション演算子がリリースされました。

ナビゲーション演算子はNull条件演算子などと称されることもあり、C#やRubyなどを使用している方はお馴染みかもしれませんが、それがApexでも実現できるようになりました。

ナビゲーション演算子はポインタ型の変数に対して、Nullでなければ第二項の結果を返し、NullであればそのままNullを返す演算子となります。
これにより、今まで気を使っていたポインタ変数に対してのNullチェックをナビゲーション演算子を使うことによって1文で記述することが可能になります。

使い方

ナビゲーション演算子は『?.』という形で記述します。
ナビゲーション演算子は使い方を簡単に例にしてみました。

例)Accountの変数accに対して、NameをaccName(String)にセットする場合

今まではこのように、オブジェクト変数のNullチェックが必要でした。
(Nullチェックをせずに直接Nameを参照しようとすると、NullPointerException)

Account acc = null;
String accName = null;
// Accountに対するNullチェックが必要だった
if(acc != null){
    accName = acc.Name;
}

ナビゲーション演算子によって、以下のように1文で取得することが可能になります。

Account acc = null;
// ナビゲーション演算子を使うと1文で記述することが可能
String accName = acc?.Name;

実際にデバッグで調べてみましょう。
以下のコードをOpen Execute Anonymous Windowで実行してみます。

// AccountをNullにしてName取得
Account acc = null;
System.debug('Account Name is ' + acc?.Name);

// Accountに値を設定してName取得
acc = new Account(Name = 'test');
System.debug('Account Name is ' + acc?.Name);

結果はこのようになりました。

このようにAccountがNullであってもNullPointerExceptionが起きることなく、結果をNullで返してくれるということが分かりました。

今回はオブジェクト変数での検証となりましたが、List型や配列などでも使用可能ですので、今後はNullPointerExceptionを恐れることなくバンバン使っていきましょう!