問題
開発者は以下のコントローラクラスを持ちます。
public with sharing class myFooController{
public integer prop {get; private set;}
}どのコードブロックが実行匿名ウィンドウで正常に実行されますか。
- myFooController m = new myFooController();
System.assert(m.prop == null); - myFooController m = new myFooController();
System.assert(m.prop == 0); - myFooController m = new myFooController();
System.assert(m.prop == 1); - myFooController m = new myFooController();
System.assert(m.prop != null);
正解
- myFooController m = new myFooController();
System.assert(m.prop == null); - myFooController m = new myFooController();
System.assert(m.prop == 0); - myFooController m = new myFooController();
System.assert(m.prop == 1); - myFooController m = new myFooController();
System.assert(m.prop != null);
解説
Apexにおけるinteger型の変数は、初期化されていない場合、デフォルトでnullになります。これはJavaなどの言語とは異なり、プリミティブ型でもnullを許容する点が特徴です。したがって、初期化されていないinteger型のプロパティにアクセスすると、nullを返します。
それぞれの選択肢の理由について説明します。
□ myFooController m = new myFooController();
System.assert(m.prop == null);
これは正解です。propは初期化されておらず、デフォルトでnullを持つため、このアサーションは成功します。
□ myFooController m = new myFooController();
System.assert(m.prop == 0);
これは不正解です。Apexでは整数型は自動的に0で初期化されないため、このアサーションは失敗します。propはnullであるためです。
□ myFooController m = new myFooController();
System.assert(m.prop == 1);
これは不正解です。propは初期化されていないためnullです。1で初期化されることはありませんので、このアサーションも失敗します。
□ myFooController m = new myFooController();
System.assert(m.prop != null);
これは不正解です。前述の通り、propはnullで初期化されるため、このアサーションは失敗します。
次の問題へ

前の問題へ

1問目から復習する


コメント