コレクションの使用
学習の目的
この単元を完了すると、次のことができるようになります。
- リストを宣言して初期化する。
- 項目をリストに追加するための 2 つの方法を説明する。
コレクション
コレクションは、複数の項目を保存できる変数の種別です。この紅茶の例では、角砂糖が何個か入ったシュガーボウルがあります。シュガーボウルをコレクション、角砂糖をそのコレクションに保存される項目と考えます。
Apex コレクションには 3 つの種別 (リスト、セット、対応付け) がありますが、このモジュールではリストを取り上げます。
リスト
Apex リストは、同じデータ型の項目の順序付けられたグループです。たとえば、買い物リストなどです。
- Tea (紅茶)
- Sugar (砂糖)
- Honey (はちみつ)
- Milk (ミルク)
買い物リストの各項目は文字列で、それぞれにリスト内の位置があります。リストを宣言するには、必要なものがいくつかあります。予約語 list、<> 文字で囲んだデータ型 (すべての項目が同じデータ型である必要がある)、予約語 new を使用します。このステートメントの最後には、必須の括弧を付けます。
空のリストの宣言
- 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
- 次のコードをコピーして、[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);
- [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
- ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。
コードを実行すると、おそらく出力が () であることに気が付くでしょう。リストには何も追加していないので空です。groceries
(食料品) リストを宣言したとき、項目を追加できるように、1 個の空のスペースが作成されました。
サイズを設定したリストの宣言
リストに必要な長さが正確にわかっている場合、リストの宣言時にサイズを設定できます。これを行うには、次のようにサイズを角括弧 [] で囲んでデータ型の後に付けます。
このコードでは、groceries という、文字列のリストが宣言され、サイズが文字列 4 個に設定されます。空の groceries リストは次のようになります。
項目の並び順の位置が、インデックスと呼ばれる数値です。インデックスは項目を参照する手段です。そのカウントは 1 から開始すると習ったかもしれませんが、多くのプログラミング言語では、カウントは 0 から開始します! そのため、Apex コードを記述するとき、リストはこのようになります。
- Tea (紅茶)
- Sugar (砂糖)
- Honey (はちみつ)
- Milk (ミルク)
リストの特定の項目を参照するために使用するインデックスは、Tea がインデックス 0、Sugar がインデックス 1、Honey がインデックス 2 というようになります。
リスト内の特定の項目はそのインデックス (リスト内の位置) で次のように参照します。
- 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
- 次のコードをコピーして、[Enter Apex Code (Apex コードを入力)] ウィンドウに貼り付けます。
String[] groceries = new String[4]; System.debug('Initialized groceries: ' + groceries); System.debug('Item 0: ' + groceries[0]);
- [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
- ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。
リストの最初の項目の値は null です。項目をいくつかリストに追加しましょう。
リストの初期化
リストの初期化とは、初期値をリストに代入することです。項目をリストに追加するには、2 つの方法があります。
- リストを宣言して初期化する。
//Sets the first item in the list to 'Tea' List<String> groceries = new List<String>{'Tea'};
- 空のリストを宣言して後で値を追加する。
List<String> groceries = new List<String>(); groceries.add('Tea');
リストを宣言して初期化する
値でリストを初期化する構文は、空のリストの宣言と似ています。違いは、括弧 ( ()
) ではなく、波括弧 ({}
) を使用して値を追加する点です。
- 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
- 次のコードをコピーして、[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);
- [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
- ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。
空のリストを宣言して後で値を追加する
後で項目を追加する場合はどうすればよいでしょうか? Apex には、リストを操作するメソッドが用意されています。add メソッドを使用して、groceries リストに食料品項目を追加しましょう。
- 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
- 次のコードをコピーして、[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);
- [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
- ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。
groceries
と add
の間にあるドット (「.」) に気が付きましたか? Apex ではドット表記を使用します。ドット表記にはいくつかの使い方があります。行 8 では、add
メソッド (Apex に付属) を groceries
リストとドットで接続して、項目 (Tea) をリストに追加します。
行 11 では、項目を特定のインデックス (位置) に挿入するという、別の方法で項目をリストに追加しています。
Apex コードを操作していくうちに、どのメソッドを使用するか判断できるようになります。この単元で学ぶ基本は、使用を開始するときに役立つでしょう。
リストの謎を解く
項目をリストに追加する方法が異なると、結果がわずかに異なります。予期しない結果になることもあります。次の演習を実行してみてください。
- 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
- 次のコードをコピーして、[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]);
- [Open Log (ログを開く)] チェックボックスをオンにして、[Execute (実行)] をクリックします。実行ログが開き、コードの実行結果が表示されます。
- ウィンドウ下部の [Debug Only (デバッグのみ)] チェックボックスをオンにします。
興味深い結果になりました。
行 4 と行 5 で 2 つの文字列を追加したとき、インデックスを指定しなかったため、Tea と Sugar はリストの最後に追加され、リストサイズが 4 文字列から 6 文字列に増えています。行 8 では、Honey にインデックス 1 を明示的に指定しています。ではなぜ、Honey はリストの最初ではないのでしょうか? プログラミングでは、常にカウントを 1 ではなく 0 から開始するのでしたね。行 11 では、リストの最初のインデックスは 0 であるため、現在 null
値が含まれています。
コードの記述は、数学の問題を解くのとよく似ています。使用するのは 1 つの式でも、同じことを行うのに多くの方法があります。この単元では、Apex には複数のリスト操作方法があることを学習しました。リストの宣言、リストの初期化、リスト内の特定の値の参照のいずれでも、その方法を選択できます。選択肢が多すぎますか? 心配はいりません。Apex に慣れてきたら、さまざまな方法を試すことで、状況によってどの方法が最適かをより詳しく理解できるようになります。