Apexコードの概要に詳しく記載されていますが、そこから抜粋して要点をまとめてみました。Javaにすごーく似ているけれどそうじゃないApexについてです。

大文字と小文字は区別なし

Java や C# と似て、クラス、インターフェース、定数、クラス変数、アノテーションなどがあるが、コードでは、大文字と小文字は区別しない。

// インターフェースの利用

public interface PurchaseOrder {
  Double discount();
}

public class CustomPurchaseOrder implements PurchaseOrder {

  static final Integer DEFAULT_DISCOUNT = .05;  // 定義の仕方は独特

  public Double discount() {
    return DEFAULT_DISCOUNT;
  }

}

// インターフェースを利用したインスタンスの生成
PurchaseOrders po = new CustomPurchaseOrder();

this、instanceOf などの Java に似たキーワードをサポート。

データ型

  • Integer、Date などのプリミティブデータ型
  • 永続オブジェクトであることを示す sObject 型
  • コレクション型、列挙型
  • ユーザまたはシステムによって定義された Apexクラス

プリミティブデータ型

  • Blob (バイナリデータを格納)
  • Boolean
  • Date、Time、Datetime
  • Decimal (通貨などの任意精度の数値用)
  • ID (Force.com データベースレコードの識別子型)
  • Integer、Long、Double、String
DateTime dt = System.now() + 1;
Boolean mustI = true;
String s = 'abc'.toUpperCase();  // String型は、二重引用符ではなく一重引用符
Decimal d = Decimal.valueOf('123');  // Integerのような定義ではない

コレクション型

Set は、プリミティブ型の集合で順序の指定はなく、要素の重複は許されない。

Set<String> s = new Set<String>{'a','b', 'c'};  // 定義の仕方は独特
s.add('c');
System.assert(s.contains('b'));
System.assert(s.size() == 3);

List は、要素の集合。要素間の順序を保持したい場合に使用し、要素の重複は許される。

List<Integer> myList = new List<Integer>();
myList.add(47);
myList.get(0);

List では配列構文を使用可能!

String [] colors = new List<String>();
colors[3] = 'Green';

Mapは、キーと値のペアの集合

Map<String,String> myStrings = new Map<String,String>{'a'=>'b','c'=>'d'.toUpperCase()};

// Contact オブジェクトから、id 項目および lastname 項目の値のみを取得してセット
Map<ID,Contact> m = new Map<ID, Contact>([select id, lastname from contact]);

列挙型

// Season という新しいデータ型を作成し、このデータ型の変数を宣言して値を代入
public enum Season {WINTER, SPRING, SUMMER, AUTUMN}
Season s = Season.AUTUMN;

ループ処理

Integer count = 1; 
while (count < 11) { 
  System.debug(count); 
  count++; 
}
for (Integer i = 0, j = 0; i < 10;i++){ 
  System.debug(i+1); 
}
Integer[] myInts = new Integer[]{1,2,3,4,5,6,7,8,9,10};
for (Integer i : myInts) {  // 独特、PHPでいうforeach?
  System.debug(i); 
}
String s = 'Acme'; 
for (Account a : [select id, name from account where name like :(s+'%')]){ 
  //Your code 
}

例外

throw、try、catch、finally もある。

try { 
  throw new Exception();

} catch(ListException e) {

} catch(Exception e) {

}

アノテーション

Apex は 2 種類のアノテーションをサポートしている。カスタムのアノテーションを作成することはできない。

  • @future:非同期的に実行されるメソッドを示す。
  • @isTest:すべてのメソッドがテストメソッドであることを示す

getter、setter

2つは同義らしい。。。

public Integer prop { 
  get { return prop * 2; }
  set { prop = value; } 
}
public Integer anotherProp {get;set;}

データベース連携

Salesforceではデータベースのテーブルをオブジェクトという概念で扱うので、Apexからは、データベースオブジェクト (sObject) を作成して、登録したり、更新したり、viewのVisualforceのページに表示するために保持したりする。

// sObjectの作成(インスタンスの生成)
sObject s = new Account();
Account a = new Account(name='Acme', billingCity='Edinburgh');

// データを登録(insert)
insert a;

// データの参照
ID id = a.ID;
String x = a.name;

String x = a.get('name');

クエリ

2種類のクエリ言語をサポートしている。

  • Salesforce Object Query Language (SOQL) : クエリ専用の言語
  • Salesforce Object Search Language (SOSL) : 検索を実行するシンプルな言語
sObject s = [select id, name from account where name='Acme'];
String myName = 'Acme';
Account [] accts = [select ID from Account where name=:myName];
Double rev= [select annualRevenue from Account where name = 'Acme'][0].annualRevenue;
Contact c= [select Account.name from Contact where id =:id];
// SOSL ステートメント
List<List<SObject>> searchList= [FIND 'map*' IN NAME FIELDS RETURNING Account (id, name),Contact];
Account [] accounts = ((List<Account>)searchList[0]);
Contact [] contacts = ((List<Contact>)searchList[1]);