@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

Ruby2.6 に関数合成オペレータが追加されたのでFizzBuzzで遊ぶ

fizzbuzz = -> x { x % 15 == 0 ? 'FizzBuzz' : x % 5 == 0 ? 'Buzz' : x % 3 == 0 ? 'Fizz' : x }
p_fizzbuzz = -> x { p x } << fizzbuzz

1.upto(15){ | n | p_fizzbuzz.call(n) }

pと合成するだけでは面白くないですね。

fizz = -> x { (x.is_a? Integer) && x % 3 == 0 ? 'Fizz' : x }
buzz = -> x { (x.is_a? Integer) && x % 5 == 0 ? 'Buzz' : x }
fizzbuzz = -> x { (x.is_a? Integer) && x % 15 == 0 ? 'FizzBuzz' : x }
do_fizzbuzz = fizz << buzz << fizzbuzz

1.upto(15){ | n | p do_fizzbuzz.call(n) }

条件に一致したら文字に変換、一致しなかったら素通しする関数にわけて合成してみました。

関数合成の一般的な良い使い道は特に思いつきません。

参考:プロと読み解く Ruby 2.6 NEWS ファイル - クックパッド開発者ブログ