トップ «前の日記(2020-04-18) 最新 次の日記(2020-05-02)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2020-04-22

_ Rubyの状態変数の値

状態変数を利用したプログラムを実装するときに、あまり何も考えずに、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にしたら解消した。型指定がなくてよかった。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|

ジェズイットを見習え