著作一覧 |
状態変数を利用したプログラムを実装するときに、あまり何も考えずに、Numeric定数を使ってしまって失敗した。
STATE_A = 1 STATE_B = 2 STATE_UNKNOWN = 99 ... case @current_state when STATE_A ...
あとからステートパターンを実装することを考えたら、そこはSymbolを使うべきところだった。
STATE_A = :state_a # 不要だが、ステート一覧を示すための宣言と考える STATE_B = :state_b ... if self.respond_to?(@current_state) @current_state = self.__send__(@current_state) else raise "unknown state #{@current_state}" end ... def state_a if foobar STATE_B else STATE_A end end
追記: よく考えたらstateを算術演算しているわけではないから中身をSymbolにしたら解消した。型指定がなくてよかった。
ジェズイットを見習え |