Null object Pattern
メソッドを呼ぶ前にnullチェックを呼ばなくてもよくするパターン.
import std.stdio; // 誰かが作って中身を変えられないコード //////// enum 乱数 = 1; interface I { void m(); } class A : I { override void m(){ writeln("hi"); } } I foo(){ if (乱数%2) return new A; else return null; } //////////////////////////////////////////////// class NullObject : I { override void m() { /+ do nothing +/ } } I bar(I i){ if (i !is null) return i; else return new NullObject; } void main() { //if (i is null) {} else { i.m(); } // これの代わりに I i = bar(foo()); f(i); } void f(I i) { i.m(); } // nullチェック要らず hi