孤独プログラマー譚

孤独死が近い。

elseifやswitch文は連想配列に置き換えてポリモーフィズム

elseifやswtich文は出来るだけ避けたい。
一連のスクリプトから状態を排除したいし、後々の改修で誰かがネストしまくるのが想像できる。

置き換えるには、Stateパターン等を使う必要があると思っていたが、実は連想配列で解決できることに気付いた。

以下、よく見るコード。Rubyで書く。

who = 'shizuka'
if who == 'dora' then
  p '僕ドラえもん'
elsif who == 'nobi' then
  p '僕のび太'
elsif who == 'shizuka' then
  p '私しずか'
end

とにかくキモい。このメソッド内で、dora / nobita / shizuka の分岐が、他に何度も繰り返されるのが目に浮かぶ。


これを連想配列にする。

hash = {
  dora: ->{ p '僕ドラえもん' },
  nobi: ->{ p '僕のび太' },
  shizuka: ->{ p '私しずか' },
}
who = :nobi
hash[who].call

ポリモーフィズムにもなっていて、結構イケてると思うんだけど…。

この、簡単に手を入れられない(深いネストを書けない)ところが良い。


実はelseif文は、連想配列に書き換えられる、という気付きでした。ちゃんちゃん。