...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

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