エンジニアリングにはほど遠い

iPhoneアプリとかサイトとかをつくっていくブログです。

Rubyのcaseを圧縮

whenの後の条件式のあとは改行しないとエラーになるのでどうしても行数が長くなる
(追記: when A then B でいけます。基本的な事だけど知らなかった・・)

case key
when :foo
  1
when :bar    
  2
else
  3
end

条件が文字列かシンボルであれば下の様に書いてみてる。

{ foo:    1,
  bar:    2
}[key] || 3

式を返すなら

a = { foo: ->{ 0 + 1 },
      bar: ->{ 1 + 1 }
}[key]
a ? a.call : 1 + 2

(訂正: {...}[key].call としていたがこれはhashがnilのとき落ちる)
逆に複雑に見える気も。
これは良くない・もっとこうした方がいい等あったら教えていただきたいです。

追記: when A then B で書けることを知った

case key
when :foo then 1
when :bar then 2
else           3
end

まあこれならこれでいいかなw