Skip to main content
Build the future with Agentforce at TDX in San Francisco or on Salesforce+ on March 5–6. Register now.

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」の場合、ループは停止します。

従来の for ループのワークフロー図

このループ宣言ステートメントは、次の 3 つのことを行います。

  1. i 変数を 0 に初期化する。
  2. i < 5 条件を指定する。
  3. i 変数を 1 つずつ増分する (i++)。

for(Integer i = 0; i<5; i++){ //Code Block }

ループの開始時、i 変数は 0 で、これは 5 未満です。条件が true であるため、ループが 1 回実行されます。この 1 回の反復処理の終わりに、変数が増分し、i1 になりますが、依然として 5 未満です。そのため、ループが再度実行されます。このように i = 5 になるまでサイクルが繰り返されます。変数が 5 になると、条件が false になるためループが終了します。

従来の for ループを記述して実行する

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (匿名実行ウィンドウを開く)] をクリックします。
  2. [Enter Apex Code (Apex コードを入力)] ウィンドウに次のコードを貼り付けます。
  3. for(Integer i = 0; i < 5; i++){
        System.debug('The number is ' + i );
    }
  4. コードを実行して、デバッグログを確認します。

5 つのエントリの数値が 0 から 4 に増加していることがわかります。 

[2]|DEBUG| The number is 0.[2]|DEBUG| The number is 1.][2]|DEBUG| The number is 2.[2]|DEBUG| The number is 3.[2]|DEBUG| The number is 4.

では、while ループや do-while ループが for ループと同じことを行うのであれば、なぜ for ループを使うのでしょうか? 次の 2 つの理由があります。 

  1. for ループは、ループを実行すべき回数がわかっている場合に使用します。実行する回数以外の条件に基づいてループを終了する場合は、while ループを使用します。
  2. 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 つのことを行います。

  1. t 変数を文字列データ型 (リストのデータ型と一致) で宣言する。
  2. ループ反復処理を行うリストに、tea リストを指定する。

リスト宣言と、反復の for ループ宣言は用意されています。ここですべきことは、この 2 つをループ本体に組み合わせることです。そうすれば、コードを実行できます。

コードを実行する

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (匿名実行ウィンドウを開く)] をクリックします。
  2. [Enter Apex Code (Apex コードを入力)] ウィンドウに次のコードを貼り付けます。
  3. List <String> tea = new List<String>{'Black Tea', 'Green Tea', 'Chai Tea'};
    for(String t : tea){
        System.debug('We have ' + t);
    }
  4. コードを実行して、デバッグログを確認します。

デバッグログを確認します。3 つのエントリが表示され、Black Tea (紅茶)、Green Tea (緑茶)、Chai Tea (チャイ) があることがわかります。

Black Tea (紅茶)、Green Tea (緑茶)、Chai Tea (チャイ) の 3 つのエントリがあるログをデバッグします。

素晴らしいですよね!

まとめ

これで完了です。たくさんのことを習得しました。概念がよくわからない場合は、『Apex 開発者ガイド』など Apex のリソースを参照してください。答えを見つけられる場所を知ったうえで問題の解決にじっくり取り組めば、Apex のコーディングが次第に簡単になっていきます。焦りは禁物です。では、コーディングをお楽しみください!

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む