Salesforceのfor文について知っておくべきこと【セールスフォース】
こんにちは、アンダーソンです。
今回はプログラミングやってる人なら当然のように使ったことがある
for文についてSalesforce特有の動きをご紹介していきます。
従来のforループ
一般的なfor文の使い方として
List<Account> accList = [SELECT Id FROM Account LIMIT 100];
for ( Integer i = 0 ; i < accList.size() ; i++ ) {
Contact c = new Contact(
FirstName = 'Test' + i,
AccountId = accList[i].Id
);
}
for ( 初期化 ; 継続条件 ; 再初期化 )
という見慣れた形でのfor文がApexにもあります。
リスト反復またはセット反復の For ループ
Apexでは配列やセット内の要素の反復をさせることができます。
List<String> sList = new List<String>{'apple','orange','banana'};
for ( String s : sList ) {
system.debug(s);
}
これを実行した結果がこちらです。
簡単に反復をとることができるためわかりやすいですね。
今回はStringでしたが、受け取る側はsObjectやObject型でもOKです。
SOQL for ループ
リスト反復はSalesforce特有だと思いますがこちらもSalesforce特有のループ処理になると思います。
Integer i = 0;
for ( Account acc : [SELECT Id FROM Account LIMIT 100] ) {
Contact c = new Contact(
FirstName = 'Test' + i,
AccountId = acc.Id
);
i++;
}
先ほどのリストの部分にSOQLを実行して帰ってきた配列をそのまま反復させる形です。
実行速度比較
それぞれにLimits.getCpuTime()をつけてみたのと開発者コンソールでTimeLineをみて確認してみました。
下記が結果です。※全てAccount100件を取得してcontactのAccountIdに紐付けを行ってます。
①従来のforループ CpuTime:8 HeapSize:4847
②リスト反復またはセット反復の For ループ CpuTime:9 HeapSize:4853
③SOQL for ループ CpuTime:11 HeapSize:1192
という結果になりました。明らかに③のヒープサイズが下がっているのがわかると思います。
処理が多くなるような場合には基本的には③の処理を使うのがいいかと思います。
この違いはしっかり頭に入れた上で実装していかないとダメですね。
Author And Source
この問題について(Salesforceのfor文について知っておくべきこと【セールスフォース】), 我々は、より多くの情報をここで見つけました https://qiita.com/Mr_Anderson/items/35149e80ab539b242060著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .