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文は、連想配列に書き換えられる、という気付きでした。ちゃんちゃん。