400
Post/Edit Page
宗教戦争よりは一歩手前の話。私は、クラスの中で出来るだけ「ローカルステート」という概念を使わないようにしている。モードAだからこの関数が呼ばれる、モードBだからこの変数の値が変わる……というようなやり方だ。メインの関数には列挙型のケース文が立ちならぶ。あちこちが論理型のメンバ変数を埋め込んだif文で括られる。そういう実装である。▼理由は簡単。ローカルステートを多用すると、処理の流れが実行するまでわからなくなるからだ。20個の列挙型ステートがあり、それぞれに対応する処理がケースの中に書かれ、その中でもステートが変わるようなコードを想像してみれば、書いた人間以外――あるいは当人すら――保守できないのは明らかである。▼論理型のメンバで条件分岐させたくないのも同じ理由だ。どんなときでも、そのフローに「いつ入るのか」が直感的にわかるのが望ましい。分岐条件の参照透過性は可能な限り高くするべきだと考える。
pass:
Draft