クラスメソッド
メソッドを定義するには、次を指定します。
- 省略可能: public や protected などの修飾子。
- 必須: String や Integer など、メソッドが返す値のデータ型。メソッドが値を返さない場合は、void を使用します。
- 必須: カンマで区切られたメソッドの入力パラメータのリスト。括弧 () で囲まれます。各パラメータの前にデータ型を指定します。パラメータがない場合は、1 組の空の括弧を使用します。メソッドに指定できるパラメータは 32 個までです。
- 必須: 中括弧 {} で囲まれたメソッドの本文。ローカル変数宣言を含めたメソッドのすべてのコードがここに含まれます。
メソッドを定義するには、次の構文を使用します。
次に例を示します。
Java の場合と同様に、結果が別の変数に割り当てられない場合、値を返すメソッドもステートメントとして実行できます。
ユーザ定義メソッドの次の点に注意してください。
- システムメソッドが使用されている任意の場所で使用できます。
- 再帰可能です。
- sObject ID を初期化する DML insert ステートメントなど、悪影響がある可能性があります。「Apex DML ステートメント」を参照してください。
- ユーザ定義メソッド自体または同じクラスまたは匿名ブロックで後で定義されたメソッドを参照できます。Apex は、2 つのフェーズでメソッドを解析します。そのため、事前の宣言は必要ありません。
- 多相的な実装が可能です。たとえば、foo というメソッドは、1 つの integer パラメータを使用する場合と、2 つの integer パラメータを使用する場合の、2 とおりの方法で実装できます。Apex のパーサーは、メソッドが 1 つの integers でコールされるか 2 つの interger でコールされるかによって適切な実装を選択して実行します。パーサーで完全一致を検出できない場合、データ型の強制規則を使用して、おおよその一致を検索します。データ変換の詳細は、「変換の規則について」を参照してください。
- 副次的影響のある void メソッドを使用する場合、ユーザ定義メソッドは、通常、Apex コードのスタンドアロンの手順のステートメントとして実行されます。次に例を示します。
- 結果が別の変数に割り当てられない場合、戻り値をステートメントとして実行するステートメントを指定できます。これは Java と同じです。
値によってメソッド引数を渡す
Apex では、Integer または String などのすべてのプリミティブデータ型引数は、値によってメソッドに渡されます。つまり、引数への変更はメソッドの範囲内でのみ存在することになります。メソッドが返ったときに、その引数への変更は失われます。
sObject などの���プリミティブデータ型引数も、値によってメソッドに渡されます。つまり、メソッドが返ったときに、渡された引数はメソッドをコールする前と同じオブジェクトをそのまま参照することになり、別のオブジェクトを参照するようには変更できません。ただし、オブジェクトの項目の値はメソッド内で変更できます。
メソッドにプリミティブデータ型と非プリミティブデータ型を渡す例を次に示します。
例: プリミティブデータ型引数を渡す
この例では、String 型のプリミティブ引数が値によって別のメソッドに渡されることを示します。この例の debugStatusMessage メソッドは、String 変数 msg を作成して値を割り当てます。次に、この変数を引数として別のメソッドに渡し、この String の値を変更します。ただし、String はプリミティブ型のため、値によって渡され、メソッドが返ったときに、元の変数 msg の値は変更されていません。assert ステートメントは、msg の値が古い値のままであることを確認します。
例: 非プリミティブデータ型引数を渡す
この例では、List 引数を値によって別のメソッドに渡し、変更できる方法を示します。また、List 引数は別の List オブジェクトを参照するようには変更できないことも示します。最初に、createTemperatureHistory メソッドで変数 fillMe (Integer の List) を作成し、その変数を別のメソッドに渡します。コールされたメソッドは、丸められた温度値を表す Integer 値をこの List に入力します。メソッドが返ったときに、元の List 変数が変更されていて現在 5 つの値が含まれていることを assert で確認します。次に、2 番目の List 変数 createMe を作成し、別のメソッドに渡します。コールされたメソッドは、渡された引数を新しい Integer 値を含む新しく作成された List に割り当てます。メソッドが返ったときに、元の createMe 変数は新しい List は参照せず、元の空の List を参照します。assert で createMe に値が含まれないことを確認します。