質問をすることで答えは変更されない原則
メイヤー著「オブジェクト指向入門 第2版 方法論・実践」でクラス設計の面白い原則があったのでまとめてみました。
ファンクションに副作用があってはならない
ファンクションの副作用とはファンクション呼び出しによって属性の値が変更されること。
たとえばNumberというクラスがあって
multiplyメソッドを呼ぶとvalue属性の値が変わる場合、副作用があるという。
ファンクションに副作用があると
- 数学におけるファンクションと意味が違う
- 参照透過性が消失する
という問題が発生する。このことからファンクション設計時には以下の行為は避けるべきである。
- プロシージャの呼び出し
- 属性に代入
- 生成命令(コンストラクタ呼び出し)
プロシージャでは積極的にオブジェクトの内容を変更せよ
ファンクションに副作用があってはならないが、逆にプロシージャでは積極的にオブジェクトの内容を変更するべきである。むしろ副作用のないプロシージャに意味はない。
ファンクションに副作用があっても良い場合
以下の場合は例外的に副作用を認める