SalesforceのWinter’21にセーフナビゲーションオペレータが追加されました。
これを使うとApex開発におけるNullチェックが簡単に行えます。
本記事では、以下のセミナー動画およびヘルプページを参考にしています。
詳しい内容をみたい方は以下のサイトで確認してみてください。
【新機能】Winter ’21リリース注目の新機能〜開発者向け
https://www.youtube.com/watch?v=Cx517VNqIqw
安全なナビゲーション演算子を使用した Null ポインタ例外の回避
https://help.salesforce.com/articleView?id=release-notes.rn_apex_SafeNavigationOperator.htm&release=228&type=5
概要
Apex開発を行ったことはもちろん、他の言語でも開発したことがあるかたは「NullPointerException」(通称:ぬるぽ)が発生したことがあるかと思います。
Salesforceでは以下のような実装の場合に、ぬるぽが発生します。
String str1 = null;
String str2 = str1.toLowerCase();
ここでは、nullであるstr1に対して、toLowerCaseメソッドを実行しようとしているため、「NullPointerException」が発生してしまいます。
そのため、ぬるぽが発生しないように、これまでは以下のように実装するのが一般的でした。
String str1 = null;
if (str1 != null){
String str2 = str1.toLowerCase();
}
しかし、今回Apexに追加されたセーフナビゲーションオペレータを使用することで、以下のように記載をすることが可能です。
String str1 = null;
String str2 = str1?.toLowerCase();
if文を使用して、nullチェックを行わなくても変数の後ろに「?.」を記載するだけで、プロパティやメソッドへのアクセス時に変数がnullの場合は、nullを返してくれます。
また、この機能はSOQLで取得したリスト数の確認でも使用することが可能です。
これまでは、0件のリストにアクセスしようとすると「System.ListException」が発生してしまうため対策として以下のような実装が一般的でした。
String AccName;
List<Account> results = [SELECT Name FROM Account WHERE Id = 'XXXXXXXXXXX'];
if(results.size() == 0){
AccName = null;
}else{
AccName = results[0].Name;
}
しかしこの実装も、セーフナビゲーションオペレータを使用することで以下のように短く記載することができます。
String AccName = [SELECT Name FROM Account WHERE Id = 'XXXXXXXXXXX']?.Name;
おわりに
セーフナビゲーションオペレータは、KotlinやSwift、JavaScript、C#などの開発言語も採用されている演算子のようです。今後も少しずつモダンな開発の要素をApexに取り込んで行って欲しいですね。