# RubyでFizzBuzz。こんな書き方があったか。。 _published: 2009/04/09_ ![alt](http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/shunsuk/20090409/1239283437) dankogai氏が公開している、ブラウザでLLを実行するlleval。 - [lleval - run codes from your browser](http://colabv6.dan.co.jp/lleval.html) - [404 Blog Not Found:Ajax - llevalのサポート言語がさらに増えました](http://blog.livedoor.jp/dankogai/archives/51192521.html) FizzBuzzのサンプルがついているのですが、RubyのFizzBuzzがオモシロかったのでメモ。 ```ruby 1.upto(30) do |i| s = [ [:Fizz][ i % 3 ], [:Buzz][ i % 5 ] ] * ''; puts s[1] ? s : i end ``` セミコロンが付いているのはともかく、配列の使い方がウマイ。 まず、 `:Fizz][ i % 3 ]` のところ。1つめの括弧が配列のリテラルで、2つめの括弧で配列にアクセス。で、インデックスが配列のサイズ以上だと `nil` が返ります。 ```ruby p [:Fizz][0] #=> :Fizz p [:Fizz][1] #=> nil ``` 配列の `*` は `join` と同じです。その後の文字列をセパレーターにして連結。 ```ruby p [:Fizz, :Buzz] * ', ' #=> "Fizz, Buzz" p [:Fizz, :Buzz] * '' #=> "FizzBuzz" ``` `s[1]` は文字コードを返しますが、`s` が空文字列なら `nil` を返します。 というテクニックのコラボレーションで成り立っています。こんなの、思いつかないよ。。。