本記事では、混同しやすい null と 空文字 の違いについて、Salesforce(主にApex)での使い分けについて紹介いたします。
①そもそも null や 空文字 とは
null は「値が存在しない」ことを意味します。
つまりカスタム項目やApexクラスで使用される変数が何の値も持っていない状態です。
反対に、空文字 は「値は設定されているが、内容が空である」状態を意味します。
空の文字列が入っており、null と違って値が存在しないわけではありません。
(長さ0の文字列をイメージ)
② null や 空文字 を設定可能なデータ型
値を未設定の場合、 null または 空文字 が設定されるデータ型については、以下の通りです。
■空文字が設定できない(null が設定される)データ型
- 数値(Number, Currency, Percent)
→数値項目のみ許容されるため空文字は設定不可 - 日付(Date, Date/Time)
→日付項目も空文字は設定不可 - チェックボックス(Checkbox)
→チェックボックスは True か False のどちらかの値しか取れないため、空文字は設定不可 - 参照(Lookup, Master-Detail)
→参照項目にはオブジェクトのIDが入るため、空文字は設定不可 - 選択リスト(Picklist)
→事前定義された値から選択するため、空文字を設定不可
■空文字が設定可能なデータ型
- テキスト(Text)
- ロングテキストエリア(Long Text Area)
- リッチテキストエリア(Rich Text Area)
- 電話(Phone)
- メール(Email)
上記は全てテキスト関連のデータ型であり、null も設定可能です。
(空文字が設定できないデータ型はありますが、null は全てのデータ型に設定可能)
③Apexでの判定について
Apexで使用される 空文字 および null の判定について紹介いたします。
- 比較演算子「X == 」
- String.isEmpty()
- String.isBlank()
※2と3の違いは、ブランクを判定するか否かとなります。
(String.isEmpty()はブランクが含まれる場合False)
1.比較演算子「X == 」
2.String.isEmpty()
3.String.isBlank()
2.String.isEmpty() や 3.String.isBlank()は、空文字の場合とnullの場合の両方で True となっているため、
null の場合を正確に判定したい場合は、1.比較演算子「X == null」を使用するのが好ましいです。
空文字の場合の判定は、1.比較演算子「X == ”」でも3.String.isBlank() でも問題ありません。
まとめ
今回はnull と 空文字 の違いについて、紹介いたしました。
null のみ設定可能なデータ型(空文字が設定できない)が存在するため、注意が必要となります。
実際に判定処理や空の値を設定する際には、本記事の内容を是非参考にしてみてください。