この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

安全なナビゲーション演算子

null 参照の明示的な順次チェックの代わりに、安全なナビゲーション演算子 (?.) を使用します。この演算子は、null 値を操作しようとする式を除外し、NullPointerException を発生させずに null を返します。

チェーン式の左側が null に評価され���場合、右側は評価されません。安全なナビゲーション演算子 (?.) は、メソッド、変数、プロパティチェーニングで使用します。評価されない式の部分には、変数参照、メソッド参照、または配列式などがあります。

すべての Apex 型は暗黙的に null 可能であるため、演算子から返された null 値を保持できます。

メモ

  • 次の例では、まず a を評価し、a が null の場合に null を返します。それ以外の場合、戻り値は a.b になります。
  • 次の例では、a[x] が null に評価される場合に null を返します。a[x] が null に評価されず、aMethod() で null が返される場合、この式で NullPointerException がスローされます。
  • 次の例では、a[x].aMethod() が null に評価される場合に null を返します。
  • 次の式では、安全なナビゲーション演算子が式で使用されているかどうかに関係なく、式の型が同じであることを示します。
  • 次の例では、null をチェックするコードのブロックを置き換える 1 つのステートメントを示します。
  • この例では、安全なナビゲーション演算子を使用する 1 行の SOQL クエリを示します。
表 1. 安全なナビゲーション演算子の使用事例
可能な使用事例 詳細情報
メソッド、変数、またはパラメータチェーン aObject?.aMethod(); 最上位のステートメントとして使用できます。
キャスト内など、括弧の使用。 ((T)a1?.b1)?.c1() この演算子は、最初の閉じ括弧までメソッドチェーンをスキップします。括弧の後に演算子を追加することで、このコードは式全体を保護します。演算子を括弧の後以外の場所で使用すると、キャスト式全体が保護されません。たとえば、次の動作を考えます。
上記は、次のステートメントと同等です。
sObject チェーニング String s = contact.Account?.BillingCity; 関係が null の場合、sObject 式は null に評価されます。その動作は String s = contact.Account.BillingCity と同等です。
SOQL クエリ String s = [SELECT LastName FROM Contact]?.LastName;
SOQL クエリでオブジェクトが返されない場合、式は null に評価されます。その動作は次と同等です。
場合によっては、安全なナビゲーション演算子を使用できません。このような場合に演算子を使用しようとすると、コンパイル中にエラーが発生します。
  • ドットが含まれる種別や静的式。次に例を示します。
    • Namespaces
    • {Namespace}.{Class}
    • Trigger.new
    • Flow.interview.{flowName}
    • {Type}.class
  • 静的変数アクセス、メソッドコール、式。次に例を示します。
    • AClass.AStaticMethodCall()
    • AClass.AStaticVariable
    • String.format('{0}', 'hello world')
    • Page.{pageName}
  • 割り当て可能な式。次に例を示します。
    • foo?.bar = 42;
    • ++foo?.bar;
  • SOQL バインド式。次に例を示します。
  • sObject スカラー項目に addError() が含まれる。次に例を示します。

    参照関係項目と主従関係項目を含め、SObjects では演算子を addError() と共に使用できます。

    メモ