Ruby Weeklyより。Callbacks and Rubyという記事でRubyでCoffeeScriptっぽい?コールバックを書く例が紹介されていて、あんまりRubyでは見ないコードなので面白いなーと思いました。
どんなコードなの?
こんなコード。そこはかとなくCoffeeScriptぽい。
1 2 3 4 5 6 7 8 9 |
Payments::ChargeCreditCard.new(credit_card_params, payment_options).run( on_success: -> (response) { response.amount response.transaction_id }, on_failure: -> (response) { response.failure_message } ) |
Rubyでよく見るのはこんな感じに、ブロックで書く感じのコードだと思います。
1 2 3 4 5 6 7 8 |
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をご覧ください。