FizzBuzz問題 あれから半年。

 Rubyをメインとする仕事を始めて、まもなく半年になります。
 当時書いたFizzBuzzと比べて、今書いたらどんなFizzBuzzが書けるか、ちょっとやってみました。
 偶然にもちょうど今日から半年前でした。
 http://d.hatena.ne.jp/Kirika/20090922

p (1..100).map{|x|
    a = (x % 3 == 0 ? "Fizz" : "") + (x % 5 == 0 ? "Buzz" : "") 
    x = a == "" ? x : a
}

変わったところ

  • eachからmapに変更して、配列に展開してから処理するようにした。

 ブロックの中にpを埋め込まなくていいので、汎用性が上がる。

 演算子としてif文を使用出来るのは、便利。
 ただし演算子の結合順序が % > + > ?:の順番なので、括弧で囲む必要がある。

  • ブロック変数の有効活用

 ブロック変数を書き換えるとyieldで渡された配列の中の変数に影響を与えることが出来る。
 当時はこの規則を知らなかったので、冗長な書き方になっていた。