「なぜNullはダメか」なのか

なぜNullはダメか | To Be Decided
https://tbd.kaitoy.xyz/2015/07/26/why-null-is-bad/

Why NULL is Bad? - Yegor Bugayenko
http://www.yegor256.com/2014/05/13/why-null-is-bad.html

以下がダメだというコード


public Employee getByName(String name) {
int id = database.find(name);
if (id == 0) {
return null;
}
return new Employee(id);
}

以下ならOK


//例外によるフェイルファスト
public Employee getByName(String name) {
int id = database.find(name);
if (id == 0) {
throw new EmployeeNotFoundException(name);
}
return Employee(id);
}

//NULLオブジェクトデザインパターン
public Employee getByName(String name) {
int id = database.find(name);
if (id == 0) {
return Employee.NOBODY;
}
return Employee(id);
}

・例外を使う場合、呼び元は正常時の場合の記述だけでいい。
呼び元ではif文での判定などは必要ない。
異常処理の記述漏れが起きない。


・・・というが、そもそも例外を使っても正しく異常処理を書かないと
(例えばcatchのブロックがあるけど空だと)、正常に動かない。
nullを返す場合でも意識して異常処理を書けばいいだけで結局同じでは?


・NULLオブジェクトパターンは、Employeeオブジェクトを返すことが
ポイント。 nullを返す場合、nullかどうかの判定が必須だが、
Emplyeeオブジェクトの一種を返すのなら、正常時と異常時を同じ
コードで受理できる場合がある。


・・・というが、でも実際のところ、正常と異常は同じにならないのでは。
同じに出来るぐらいならnullを返さないし