変数
ローカル変数は、Java スタイルの構文で宣言されます。次に例を示します。
1Integer i = 0;
2String str;
3List<String> strList;
4Set<String> s;
5Map<ID, String> m;Java と同様、カンマ区切り形式を使用して、複数の変数を単一のステートメントで宣言および初期設定できます。次に例を示します。
1Integer i, j, k;Null 変数および初期値
変数は、宣言した後に値で初期化しないと null になります。null とは値がないことを意味します。null は、プリミティブ型で宣言された任意の変数に割り当てることもできます。たとえば、次のどちらのステートメントでも、変数は null に設定されます。
1Boolean x = null;
2Decimal d;データ型に対するインスタンスメソッドの多くは、変数が null だと失敗します。次の例では、2 番目のステートメントが例外 (NullPointerException) を生成します。
1Date d;
2d.addDays(2);すべての変数は、いずれかの値に割り当てられていない場合は null に初期化されます。たとえば、次の例では、i および k には値が割り当てられますが、Integer 変数 j と Boolean 変数 b は明示的に初期化されていないため、null に設定されます。
1Integer i = 0, j, k = 1;
2Boolean b;変数範囲
変数はブロック内のどの場所でも定義でき、その地点から適用されます。サブブロックは、すでに親ブロックで使用されている変数名を再定義できませんが、並行ブロックでは変数名を再利用できます。次に例を示します。
1Integer i;
2{
3 // Integer i; This declaration is not allowed
4}
5
6for (Integer j = 0; j < 10; j++);
7for (Integer j = 0; j < 10; j++);大文字と小文字の区別
大文字と小文字を区別しない SOQL クエリおよび SOSL クエリとの混乱を避けるため、Apex も大文字と小文字の区別をしません。つまり、次のようになります。
- 変数名とメソッド名では、大文字と小文字を区別しない。次に例を示します。
1Integer I; 2//Integer i; This would be an error. - オブジェクト名と項目名への参照では、大文字と小文字を区別しない。次に例を示します。
1Account a1; 2ACCOUNT a2; - SOQL および SOSL ステートメントは大文字と小文字を区別しない。次に例を示します。
1Account[] accts = [sELect ID From ACCouNT where nAme = 'fred'];
また、Apex は、SOQL と同じ条件セマンティックを使用します。これに基づいて、SOAP API および Salesforce ユーザインターフェースでの比較が行われます。これらのセマンティックを使用すると、興味深い動作が発生します。たとえば、エンドユーザが英字の「m」の前の値という条件 (値 <'m') に基づいてレポートを生成すると、結果に null 項目が返されます。この動作は合理的ですが、一般にユーザは値を持たない項目を実際の null 値ではなく、単なる「スペース」文字と���なします。そのため、Apex では、次の表記はすべて true と評価されます。
1String s;
2System.assert('a' == 'A');
3System.assert(s < 'b');
4System.assert(!(s > 'b'));