Skip to main content

コレクションの使用

学習の目的

この単元を完了すると、次のことができるようになります。

  • リストを宣言して初期化する。
  • 項目をリストに追加するための 2 つの方法を説明する。
エキスパートから学べることをご存知ですか? 次の動画で、このモジュールのトピックの詳しい説明をご覧ください。

コレクション

コレクションは、複数の項目を保存できる変数の種別です。この紅茶の例では、角砂糖が何個か入ったシュガーボウルがあります。シュガーボウルをコレクション、角砂糖をそのコレクションに保存される項目と考えます。

「Collection」(コレクション) というラベルが付いたシュガーボウル。シュガーボウルに入っている角砂糖は、コレクション内のラベルのついた項目です。

Apex コレクションには 3 つの種別 (リスト、セット、対応付け) がありますが、このモジュールではリストを取り上げます。  

リスト

Apex リストは、同じデータ型の項目の順序付けられたグループです。たとえば、買い物リストなどです。 

  1. Tea (紅茶)
  2. Sugar (砂糖)
  3. Honey (はちみつ)
  4. Milk (ミルク)

買い物リストの各項目は文字列で、それぞれにリスト内の位置があります。リストを宣言するには、必要なものがいくつかあります。予約語 list、<> 文字で囲んだデータ型 (すべての項目が同じデータ型である必要がある)、予約語 new を使用します。このステートメントの最後には、必須の括弧を付けます。 

List <String> groceries = new List <String>();

メモ

メモ

予約語とは、特別な意味があり、変数名として使用できないプログラミング語です。new、string、false、null などの語を変数名にしようとすると、構文エラーになります。

空のリストの宣言

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
  2. 次のコードをコピーして、[Enter Apex Code (Apex コードを入力)] ウィンドウに貼り付けます。
    //Declare the groceries list
    List<String> groceries = new List<String>();
      
    //The output for this statement is an empty list, ().
    System.debug('Groceries Value: ' + groceries);
  3. [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
  4. ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。

コードを実行すると、おそらく出力が () であることに気が付くでしょう。リストには何も追加していないので空です。groceries (食料品) リストを宣言したとき、項目を追加できるように、1 個の空のスペースが作成されました。 

groceries という名前の 1 個の大きな空の枠。

サイズを設定したリストの宣言

リストに必要な長さが正確にわかっている場合、リストの宣言時にサイズを設定できます。これを行うには、次のようにサイズを角括弧 [] で囲んでデータ型の後に付けます。 

String[] groceries = new String[4];

メモ

メモ

Apex でリストを宣言するにはいくつかの方法があります。この例では、リストサイズを設定するために配列表記を使用しています。

このコードでは、groceries という、文字列のリストが宣言され、サイズが文字列 4 個に設定されます。空の groceries リストは次のようになります。

4 つの枠に分割された groceries という名前のスペース。

項目の並び順の位置が、インデックスと呼ばれる数値です。インデックスは項目を参照する手段です。そのカウントは 1 から開始すると習ったかもしれませんが、多くのプログラミング言語では、カウントは 0 から開始します! そのため、Apex コードを記述するとき、リストはこのようになります。 

  1. Tea (紅茶)
  2. Sugar (砂糖)
  3. Honey (はちみつ)
  4. Milk (ミルク)

リストの特定の項目を参照するために使用するインデックスは、Tea がインデックス 0、Sugar がインデックス 1、Honey がインデックス 2 というようになります。 

リスト内の特定の項目はそのインデックス (リスト内の位置) で次のように参照します。

groceries[0];

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
  2. 次のコードをコピーして、[Enter Apex Code (Apex コードを入力)] ウィンドウに貼り付けます。
    String[] groceries = new String[4];
    System.debug('Initialized groceries: ' + groceries);
      
    System.debug('Item 0: ' + groceries[0]);
  3. [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
  4. ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。

リストの最初の項目の値は null です。項目をいくつかリストに追加しましょう。

リストの初期化

リストの初期化とは、初期値をリストに代入することです。項目をリストに追加するには、2 つの方法があります。

  1. リストを宣言して初期化する。
    //Sets the first item in the list to 'Tea'
    List<String> groceries = new List<String>{'Tea'}; 
  2. 空のリストを宣言して後で値を追加する。
    List<String> groceries = new List<String>();
    groceries.add('Tea');

リストを宣言して初期化する

値でリストを初期化する構文は、空のリストの宣言と似ています。違いは、括弧 ( () ) ではなく、波括弧 ({}) を使用して値を追加する点です。 

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
  2. 次のコードをコピーして、[Enter Apex Code (Apex コードを入力)] ウィンドウに貼り付けます。
    //Declare the groceries list
    List<String> groceries = new List<String>{'Tea','Sugar','Honey','Milk'};
      
    //The output for this statement is Tea, Sugar, Honey, Milk
    System.debug('Groceries: ' + groceries);
  3. [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
  4. ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。

空のリストを宣言して後で値を追加する

後で項目を追加する場合はどうすればよいでしょうか? Apex には、リストを操作するメソッドが用意されています。add メソッドを使用して、groceries リストに食料品項目を追加しましょう。

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
  2. 次のコードをコピーして、[Enter Apex Code (Apex コードを入力)] ウィンドウに貼り付けます。
    //Create the groceries list
    List<String> groceries = new List<String>();
      
    //The output for this statement is null
    System.debug('Groceries: ' + groceries);
      
    //Use the add method to add an element to the list
    groceries.add('Tea');
    groceries.add('Sugar');
    groceries.add('Honey');
    groceries.add(2, 'Milk');
      
    //The output for this statement is Tea, Sugar, Milk, Honey
    System.debug('Groceries: ' + groceries);
  3. [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
  4. ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。

groceries という名前のスペースの内部が 4 つの枠に分割され、各枠に材料の Tea、Sugar、Milk、Honey が 1 つずつ入っています。

groceriesadd の間にあるドット (「.」) に気が付きましたか? Apex ではドット表記を使用します。ドット表記にはいくつかの使い方があります。行 8 では、add メソッド (Apex に付属) を groceries リストとドットで接続して、項目 (Tea) をリストに追加します。

行 11 では、項目を特定のインデックス (位置) に挿入するという、別の方法で項目をリストに追加しています。 

groceries.add(2, ‘Milk’);

Apex コードを操作していくうちに、どのメソッドを使用するか判断できるようになります。この単元で学ぶ基本は、使用を開始するときに役立つでしょう。 

リストの謎を解く

項目をリストに追加する方法が異なると、結果がわずかに異なります。予期しない結果になることもあります。次の演習を実行してみてください。

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
  2. 次のコードをコピーして、[Enter Apex Code (Apex コードを入力)] ウィンドウに貼り付けます。
    String[] groceries = new String[4];
    System.debug('Groceries: ' + groceries);
      
    groceries.add('Tea');
    groceries.add('Sugar');
    System.debug('Added 2 items: ' + groceries);
      
    groceries.add(1, 'Honey');
    System.debug('Added Honey in index 1: ' + groceries);
      
    System.debug('Item 0: ' + groceries[0]);
  3. [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
  4. ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。

興味深い結果になりました。

4 つのデバッグログイベント。行 2 は「Groceries: (null, null, null, null)」(Groceries: (null, null, null, null))。行 6 は「Added 2 items: (null, null, null, null, Tea, Sugar)」(2 項目を追加: (null, null, null, null, Tea, Sugar))。行 9 は「Added Honey in index 1: (null, Honey, null, null, null, Tea, Sugar)」(インデックス 1 に Honey を追加: (null, Honey, null, null, null, Tea, Sugar))。行 11 は「Item 0: null」(項目 0: null)。

行 4 と行 5 で 2 つの文字列を追加したとき、インデックスを指定しなかったため、Tea と Sugar はリストの最後に追加され、リストサイズが 4 文字列から 6 文字列に増えています。行 8 では、Honey にインデックス 1 を明示的に指定しています。ではなぜ、Honey はリストの最初ではないのでしょうか? プログラミングでは、常にカウントを 1 ではなく 0 から開始するのでしたね。行 11 では、リストの最初のインデックスは 0 であるため、現在 null 値が含まれています。 

コードの記述は、数学の問題を解くのとよく似ています。使用するのは 1 つの式でも、同じことを行うのに多くの方法があります。この単元では、Apex には複数のリスト操作方法があることを学習しました。リストの宣言、リストの初期化、リスト内の特定の値の参照のいずれでも、その方法を選択できます。選択肢が多すぎますか? 心配はいりません。Apex に慣れてきたら、さまざまな方法を試すことで、状況によってどの方法が最適かをより詳しく理解できるようになります。

リソース

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

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

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