Ruby Weeklyより。Callbacks and Rubyという記事でRubyでCoffeeScriptっぽい?コールバックを書く例が紹介されていて、あんまりRubyでは見ないコードなので面白いなーと思いました。
どんなコードなの?
こんなコード。そこはかとなくCoffeeScriptぽい。
Payments::ChargeCreditCard.new(credit_card_params, payment_options).run( on_success: -> (response) { response.amount response.transaction_id }, on_failure: -> (response) { response.failure_message } )
Rubyでよく見るのはこんな感じに、ブロックで書く感じのコードだと思います。
Payments::ChargeCreditCard.new(credit_card_params, payment_options).run do |response| if response.success? response.amount response.transaction_id else response.failure_message end end
ハッシュで書く利点は可読性が上がる点だと思うのですが、反面「on_success、on_failureというキーと値を設定しなければならない」というインターフェースが定義されているわけではないので、ドキュメントなどを用意しないと使い方がわかりにくい、というのが難点な気がします。
これはJavaScriptでも同じなんですが、JavaScriptの場合はよくあるパターンすぎて一般的になっているのに対して、Rubyだとあんまり見ないので、ギョっとしてしまいますね。
ObjectiveCでもよくあるコードですが、ObjectiveCの場合は型宣言があるので、読み解きやすいです。
そんな感じで善し悪しのあるコードではありますが、使いどころのあるテクニックではあります。具体的な実装方法については、Callbacks and Rubyをご覧ください。