6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Salesforce Winter '21新機能 NULL条件演算子の概要

Last updated at Posted at 2020-11-25

Winter ’21で新しくApexのNULL条件演算子の機能が追加されたのでその概要について、以下の資料の英文を要約して整理してみました。

参考資料

Learn MOAR with Winter ’21: Safe Navigation in Apex

概要

「左辺がNULLのときは、NullPointerExceptionを発生させずにNULLを返す」というような処理をいちいち書かなくてよくなる。
要は、NULLチェックの毎回の煩雑なコードを単純化できる。

書き方

従来の書き方


if(var != null) {
    var.doStuff();
}

新しいNULL条件演算子を利用した書き方


var?.doStuff();

使用例

式が複雑になればなるほど、この演算子は効果を発揮する。

SOQL文


results = [SELECT Name FROM Account WHERE Id = :accId];
if (results.size() == 0) { // Account doesn't exist, isn't visible, was deleted, etc
    return null;
}
return results[0].Name;

従来は上記のように書いていたものを、この演算子を利用すれば以下のように簡略に記述できる。


return [SELECT Name FROM Account WHERE Id = :accId]?.Name;

ネスト

複雑なネスト構造の文も簡略に記述することができる。


public with sharing class Character{
    private static final String CHARACTER_DETAILS_PARTITION = 'CharacterDetails';
 
    public static List<String> getHobbiesFromCache(String name){
        Cache.Partition part = Cache.Org.getPartition(CHARACTER_DETAILS_PARTITION));
 
        if(part == null){
            return null;
        }
        CharacterDetails data = (CharacterDetails)part.get(name);
        if(data == null){
            return null;
        }else{
            return data.getHobbies();
        }
    }
}

上記のgetHobbiesFromCache()メソッドは以下のように1文に簡略化できる


return (CharacterDetails)Cache.Org.getPartition(CHARACTER_DETAILS_PARTITION)?.get(name))?.getHobbies();

ただし、簡略化にはなってものの可読性が落ちることもあるので、下記のような書き方が推奨されている。


CharacterDetails namedCharacter = (CharacterDetails)Cache.Org.getPartition(CHARACTER_DETAILS_PARTITION)?.get(name));
return namedCharacter?.getHobbies();

資料

(公式リリースノート)安全なナビゲーション演算子を使用した Null ポインタ例外の回避

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?