SalesforceのApexで使用できる演算子を調べてまとめました。
他言語との違いや便利な演算子のサンプルも紹介します。
Apexで使用できる演算子一覧
他言語との「==」「!=」の違い
Apexでは、文字列の比較で大文字と小文字を区別しません。
system.assert('a' == 'A');
ロケールで結果も変わります。
//日本ロケールで実行
system.assert('a' == 'A');
//英語ロケールで実行
system.assert('a' != 'A');
他言語との「===」「!==」の違い
メモリ内の同じ場所かを比較します。
他の言語でよくある同じ型かの比較ではなく、文字列型はサポートしていません。
Account a = null;
Account b = null;
a = b = new Account();
system.assert(a === b);
system.assert(new Account() !== new Account());
変数aとbには同じインスタンスが代入されているので、「===」で比較してもpassします。
new Account() と new Account() は一見同じように見えるかもしれませんが、それぞれインスタンス化した後にメモリ上に格納される場所が違うため「===」で比較すると失敗します。
3項演算子のサンプル
3項演算子は便利なため、覚えておくと良いです。
1文に何回も使うと読みにくくなるので、一旦変数に入れたり関数化する工夫をしましょう。チームで開発する場合は特に開発規約に1文に何回までと盛り込むと難解なソースコードを回避しやすいです。
String phone = string.isNotBlank(acc.PersonHomePhone) ? acc.PersonHomePhone : acc.PersonMobilePhone;
自宅電話に値がなければ携帯番号を変数に代入するなどif-then-elseを省略できます。
安全なナビゲーション演算子のサンプル
Nullだった場合、右辺を除外しNullPointerException を発生させずに null を返します。なのでNullチェックが不要になります。毎回if文でNullチェックしてヌルポと闘うのは面倒なので、この安全なナビゲーション演算子はすごく便利です。
String name = [SELECT Name FROM Account Where Name LIKE '%X%' LIMIT 1]?.Name;
あえて言わせてもらうなら「null 合体演算子 ??
」欲しいです。安全なナビゲーション演算子じゃif文内で使いにくい。
まとめ
3項演算子や安全なナビゲーションは覚えるとコードを短く書けるため便利です。
他言語と違う特徴をもつ演算子もあるので、違いを知ることで面白いかもしれません。