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でのアイデアをいただきました。こういう方向もあるなと改めて。こっちのほうがシンプルかも。