for ループを使用したリストの反復処理
学習の目的
この単元を完了すると、次のことができるようになります。
- 従来の for ループを使用する状況と、リスト反復またはセット反復の for ループを使用する状況を判断する。
- 従来の for ループと、リスト反復の for ループを記述する。
一緒にトレイルを進みましょう
エキスパートの説明を見ながらこのステップを実行したい場合は、次の動画をご覧ください。これは Trailhead Live の「Trail Together」(一緒にトレイル) シリーズの一部です。
(この動画は 1:03:24 の時点から始まります。戻して手順の最初から見直す場合はご注意ください。)
はじめに
「Apex Basics for Admins (システム管理者のための Apex の基本)」で学んだとおり、ループは指定した条件が満たされるまで繰り返されるコードのブロックです。ループを使用すると、タスクを繰り返し実行できます。Apex には 3 種類のループがあります。while
ループと do-while
ループはすでに使用しました。3 つ目は for
ループです。for
ループは、while
ループや do while
ループと同じやり方で項目を反復処理しますが、リストやセットも反復処理可能です(SOQL にも for
ループを使用できますが、この点は別の機会に説明します)。
この単元では、2 種類の for
ループについて学習します。
- 従来の
for
ループ - リスト反復またはセット反復の
for
ループ
従来の for ループ
復習すると、while
ループと do-while
ループでは、コードブロックを実行する回数を管理する条件を指定します。条件が false になるとループが終了します。for
ループも同じことを行いますが、構文がシンプルです。
次のように動作します。ループが開始すると、カウンターが初期化されます。次に、ループ条件が true かどうかを確認します。答えが「yes」の場合、ループはアクションを実行し、カウンターを更新し、戻って再び条件を確認します。条件確認の答えが「no」の場合、ループは停止します。
このループ宣言ステートメントは、次の 3 つのことを行います。
-
i
変数を 0 に初期化する。 -
i < 5
条件を指定する。 -
i
変数を 1 つずつ増分する (i++
)。
ループの開始時、i
変数は 0
で、これは 5 未満です。条件が true
であるため、ループが 1 回実行されます。この 1 回の反復処理の終わりに、変数が増分し、i
が 1
になりますが、依然として 5 未満です。そのため、ループが再度実行されます。このように i = 5
になるまでサイクルが繰り返されます。変数が 5 になると、条件が false
になるためループが終了します。
従来の for ループを記述して実行する
- 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (匿名実行ウィンドウを開く)] をクリックします。
- [Enter Apex Code (Apex コードを入力)] ウィンドウに次のコードを貼り付けます。
-
for(Integer i = 0; i < 5; i++){ System.debug('The number is ' + i ); }
- コードを実行して、デバッグログを確認します。
5 つのエントリの数値が 0 から 4 に増加していることがわかります。
では、while
ループや do-while
ループが for
ループと同じことを行うのであれば、なぜ for
ループを使うのでしょうか? 次の 2 つの理由があります。
-
for
ループは、ループを実行すべき回数がわかっている場合に使用します。実行する回数以外の条件に基づいてループを終了する場合は、while
ループを使用します。 -
for
ループは、変数、条件、増分の 3 つの部分が 1 つのステートメントにまとめられているため簡潔です。
while
ループとして記述された次の例と、for
ループとして記述されたものを見てください。
while ループ
Integer i = 0; while (i < 5){ System.debug('The number is ' + i); i++; }
for ループ
for(Integer i = 0; i < 5; i++){ System.debug('The number is ' + i ); }
for
ループのコードのほうが簡潔です。while
ループと同じことを、5 行ではなく、3 行で行います。今の時点ではコードが 2 行増えても大差ないように思えるかもしれませんが、組織のコードが何千行にもなると、1 行の追加が重要になってきます。
リスト反復またはセット反復の for ループ
リスト反復またはセット反復の for
ループ (反復の for
ループ) は、従来の for
ループの変形です。反復の for
ループは、リストまたはセット内の項目を処理します。リストまたはセットには特定数の項目が含まれるため、変数を増分したり、条件を確認したりする必要がありません。ループはリストまたはセット内のすべての項目を処理して終了します。
反復の for
ループの構文は、従来の for
ループの構文と若干異なります。反復の for
ループを宣言するときは、変数のデータ型をリストまたはセットのデータ型と一致させる必要があります。以下は、反復の for ループの構文です。
for (data_type variable_name : list_name or set_name){ // Loop body }
反復の for ループを記述する
次のリストを処理する反復の for
ループを記述してみましょう。
List <String> tea = new List<String>{'Black Tea', 'Green Tea', 'Chai Tea'};
tea
リストのデータ型は文字列です。反復の for
ループを宣言する場合は、リストのデータ型 (文字列) とリスト名 (tea) を使用します。
for (String t :tea)
このステートメントは、ループが開始される前に 2 つのことを行います。
-
t
変数を文字列データ型 (リストのデータ型と一致) で宣言する。 - ループ反復処理を行うリストに、tea リストを指定する。
リスト宣言と、反復の for
ループ宣言は用意されています。ここですべきことは、この 2 つをループ本体に組み合わせることです。そうすれば、コードを実行できます。
コードを実行する
- 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (匿名実行ウィンドウを開く)] をクリックします。
- [Enter Apex Code (Apex コードを入力)] ウィンドウに次のコードを貼り付けます。
-
List <String> tea = new List<String>{'Black Tea', 'Green Tea', 'Chai Tea'}; for(String t : tea){ System.debug('We have ' + t); }
- コードを実行して、デバッグログを確認します。
デバッグログを確認します。3 つのエントリが表示され、Black Tea (紅茶)、Green Tea (緑茶)、Chai Tea (チャイ) があることがわかります。
素晴らしいですよね!
まとめ
これで完了です。たくさんのことを習得しました。概念がよくわからない場合は、『Apex 開発者ガイド』など Apex のリソースを参照してください。答えを見つけられる場所を知ったうえで問題の解決にじっくり取り組めば、Apex のコーディングが次第に簡単になっていきます。焦りは禁物です。では、コーディングをお楽しみください!
リソース
- Apex 開発者ガイド: for ループ