switch文を使いたくないばかりに

前回の記事にて「switch文が嫌い」と書いたワガママな自分。ちょうどタイミングよくこんな記事を見てしまいました。

JavaScriptでswitch文を使わずに条件分岐 - TechTalkManiacs

とりあえずクロージャを使ってGroovyで似たようなテイストのことをやるアイデア。コスト無視の前衛的switch文の代替。というかGroovyのクロージャJavascriptっぽく使ってしまうという暴挙。まさに「code avant-garde」。前衛コーディングなのです。

ここでいう「前衛」は芸術での「前衛」なので先進的とかいう意味じゃなくて、あくまで実験的なという意味です。コードはアートなので。

def switch_nuevo = {mes ->

  delegate.metaClass.define{
    '0'{return 'this is new zero'}
    '1'{return 'this is new one'}
    '2'{return 'this is new two'}
    '3'{return (mes as Integer) * 10}
    gaga{return 'this is gaga!'}
    baba = {-> return 'this is baba!'}
    美しい日本語 = {-> return "日本人でよかった"}
    methodMissing{String name, args -> return 'this is new default'}
  }

  return this."${mes}"()
}

println switch_nuevo(0)
println switch_nuevo('1')
println switch_nuevo('gaga')
println switch_nuevo('baba')
println switch_nuevo('美しい日本語')
println switch_nuevo(2)
println switch_nuevo(3)
println switch_nuevo(5)

見た目が結構DSLっぽくなってカッコいいのですが、よいこはマネしちゃいけません。

これをふくらませて、gparsのActorのメッセージやりとりの分岐をさせたいと画策しています。

追記:
グルにHashMapでのアイデアをいただきました。こういう方向もあるなと改めて。こっちのほうがシンプルかも。