- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
【DML操作時のリストの空チェック:必要か?】
ApexコードでDML操作を行う際、リストが空かどうかをチェックするケースはよくあります:
if (!recordsToUpdate.isEmpty()) { update recordsToUpdate; }
このコードでは、リストが空でない場合のみ`update`操作が実行されます。しかし、直接`update`文を記述する場合:
update recordsToUpdate;
果たしてこれが問題になるのか?以下に詳しく解説します。
結論:リストが空の場合、DML操作は安全
`update`文やその他のDML操作(`insert`, `delete`, `upsert`など)に空のリストを渡した場合、エラーは発生せず、プラットフォームリソースも消費しません。したがって、明示的に`isEmpty()`チェックを行う必要はありません。
理由:
- Apexの仕様
Apexは空のリストがDML操作に渡されても無視します。例えば、`update`に空のリストを渡した場合、実際には何も実行されないため、データベース操作や消費リソースが発生しません。 - DML限界値(Governor Limits)
空のリストでDML操作を行っても、DML操作のカウントは増加しません。つまり、Governor Limitsに影響を与えることはありません。
空チェックの不要性を示すコード例
以下は空のリストをDML操作に渡す場合の動作確認コードです:
@isTest private class EmptyListDMLTest { static testMethod void testEmptyUpdate() { List<Account> emptyAccounts = new List<Account>(); // 空リストをDMLに渡す update emptyAccounts; // テスト成功 - エラーなし System.assert(true, 'No error should occur when updating an empty list'); } }
チェックを省略することでコードを簡潔に
リストが空の場合に何も行われないことが保証されているため、以下のように直接DML操作を記述する方が推奨されます:
update recordsToUpdate;
これによりコードが簡潔になり、メンテナンス性も向上します。
チェックを行う場合の例外的なケース
特定の状況では、リストが空かどうかをチェックすることが有益です:
- デバッグやログの追加
処理対象がないことをログに記録したい場合: - 特定のビジネスロジックの実装
空のリストを処理する際に何らかのカスタム処理を追加する場合。
if (recordsToUpdate.isEmpty()) { System.debug('No records to update'); } else { update recordsToUpdate; }
コメント
コメントを投稿