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-elseから三項演算子に切り替え。
演算子としてif文を使用出来るのは、便利。
ただし演算子の結合順序が % > + > ?:の順番なので、括弧で囲む必要がある。
- ブロック変数の有効活用
ブロック変数を書き換えるとyieldで渡された配列の中の変数に影響を与えることが出来る。
当時はこの規則を知らなかったので、冗長な書き方になっていた。