Winter'24のIterable による For ループ内での反復処理の簡略化を試してみました。Apexコードで新しくできるようになった書き方です。
書き方は次のような感じ。
MyIterable
public class MyIterable implements Iterable<String> { private List<String> strings {get; set;} public MyIterable(List<String> strings) { this.strings = strings; } public Iterator<String> iterator() { return this.strings.iterator(); } }
MyIterableTest
@IsTest private class MyIterableTest { private static User testAdminUser = new User(Id = UserInfo.getUserId()); @IsTest static void testIterableForLoop() { System.runAs(testAdminUser) { List<String> strings = new List<String>{'Hello','World'}; Test.startTest(); for (String str : new MyIterable(strings)) { System.debug(str); } Test.stopTest(); } } }
※実際のテストクラスではdebug処理は必要ありませんが..
※forの中でnew MyIterableとやっていますがforの外でnewするやり方でもOK。
Apexクラスでimplements Iterable
Iterableクラスについてはこちら。
ちなみ現在List型とSet型が使えますが、Set型が使えるようになったのはSummer'23のころということでした。
おまけ1
最初winter'25のつもりでチェックしてたけど、einter24でした。25でできるようになったのはこの部分。
おまけ2
Trailheadのハンズオンを進めていたときに次のエラーが発生しました。
ハンズオンの方は大文字小文字の違いもチェックされるみたいです。海外のコミュニティで同様のやりとりをしていました。