OSC2005-Fall

Rubyの会のセミナーで青木さんにwiki.rails2u.comで使ってるPukiwikiっぽい文法のパーサを添削して頂きました。以下、指摘して貰った箇所メモ

  • タブとスペースが混在
    • あれ、:set expandtabしてるからスペースのみだと思ってたらタブも入ってた模様。なんでだろ。:set tabstop=2でtabがぱっと見スペース二個分だから気づかなかったんだろうか。
  • 無駄なスペースが所々入っている
  • ,区切りの後にスペースが無かったり入っていたり
    • method(arg1, arg2, arg3)のように統一すべき
  • わかりきった所にコメントはダメ
    • ゴメンなさい直前に適当に付け足しました…
  • classの名前がダメ
    • 名前重要。でもPukipaってかわいくないですか?(俺だけ?)
  • joinの引数
    • pagelist.join(')|(?:') だと見にくいよと。たしかに
  • if not str =~ regexp って書き方はどうよ
    • unless str =~ regexp 、もしくはif str !~ regexp にすべき
  • if 〜 elsif 〜 elsif 〜 elseif 〜 else はcase文使った方が
    • たしかに…。phpのcase文が使いにくいのでついクセで(phpに責任のなすりつけ)
  • while !うんたら
    • until使うべき
  • 無駄にインスタンス変数
    • 変数のスコープは必要じゃないなら狭い方がいい
  • 一回しか使わないのにローカル変数に代入
    • 無駄だよね
  • 正規表現で評価した後に$1とかをdupして代入
    • このソースの場合必要ないのでそのままつかおう
  • "str" + str + "str"
    • 式展開に統一したほうがいいよ "str#{str}str"
  • when節では===で評価される
    • Regexp#=~ と Regexp#=== は同じだから利用できるよね
  • rubyの#slice
    • '**** foobar' な文字列の*の数を求めたいときは'**** hoge'.slice(/\A\*+/).lengthでさっくりと。すばらしいなぁ。
  • 無駄な正規表現コンパイル
    • インスタンス変数に初回だけ代入すればすむ箇所を毎回コンパイルしてたために遅くなってた。これの改善で10倍速!!!profilerつかって遅いところをさくっとみつけだしちゃうあたり、さすがHacker

普段周りにコード見せ合う人が居ないのでめちゃめちゃ参考になりました!一人分で半分ぐらい時間使って貰ってありがとうございます。
あとその他のRubyHackerの人とのやりとりも面白かった。返り値が解りにくい箇所ではreturnは付けるべきか付けないべきか(Hackerは付けない、けど他の人は見にくいかも)とか、コードは短ければいいの?とか(ぱっと見Ruby初心者は解らなくなってしまう、でも短いほうがRubyっぽいよね)とか。

懇談会では知り合い周りの人と話てたり。id:kunitさんにmapleをちょこっとつかってみた感想話したり、kloveさんと初めてあったり、Seasar.phpな人たちと話したり。

Rubyの人たちとは、ささださんにYARVがインストールできません!とかYARVのダウンロードする場所が解りにくい*1です!とか今思えば大変失礼なことを云っていた気がするすいません…。Rubyのドキュメントはhtmlhelpが最高ですよねやっぱり。

その後喫茶店でwebサービスとかperlとかpythonとかrubyとかいろいろ…。

みなさんお疲れ様でした!

追記

なお、添削して頂いたファイルは

http://i.loveruby.net/ja/osc2005/

で公開されています。

*1:今見たら日本語の方だとダウンロード先にリンクがないっぽい?