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で渡された配列の中の変数に影響を与えることが出来る。
当時はこの規則を知らなかったので、冗長な書き方になっていた。
Rsense使ってみた
http://d.hatena.ne.jp/m2ym/20100320/1269096685
今までまともに補完してくれるツールは無かったので、重いだけのNetBeansやEclipseは使わずにVimを使って開発してました。
Vimでも補完をしようと思えば出きるのですが、辞書作るのは面倒だわ、全文検索するだけでまともな候補はないわで結局Omni補完するのを止めてしまったのですが、ようやくまともなツールが出てきて喜ばしいです。
とりあえず導入して触ってみた印象ですが、ちゃんと補完してくれます。ちゃんと演算子の結合順序も考慮して、正しい補完を選んでくれるみたいで、結果も信用できそう。さっそく今後の開発に取り入れてみたいと思います。
ただ、Vimから使う際は^Xモードの^Uから呼び出さないといけないみたいで、それが面倒です。
マニュアルによるとAutoComplPopup.vimを使用して自動ポップアップとして使うこともできると書いてあるのですが、AutoComplPopupはなんでもポップアップしようとするので、切ってしまいました。
出来れば従来のOmni補完モードを上書きしてC-p, C-nとかで呼び出したいのですが……。
もうちょっと調べてみることにします。
今日届いた本
- 作者: 中村成洋,相川光,竹内郁雄
- 出版社/メーカー: 秀和システム
- 発売日: 2010/03/18
- メディア: 単行本
- 購入: 25人 クリック: 786回
- この商品を含むブログ (90件) を見る
ちょっと予約のタイミングが遅かったのか、本日Amazonから到着。
ちょうどRubyのGC周りで不具合が発生していて、がっつりとRubyのgc.cのソースとかを読んでいたので、これはタイムリーな話題ということで購入。まあ、とはいえ自分の問題の方はもう解決しちゃったわけなんだけれども。
これを気に色々GC周りを勉強していきたいと思うので、ぼちぼちと読んでいきたいと思います。