1.7以降は case で正規表現マッチが使いものになるのか

Rubyist Magazine - あなたの Ruby コードを添削します 【第 1 回】 pukipa.rb

Perl育ち(switch文がない)なのとリファレンスをよく読んでいなかったため、case .. when で正規表現マッチが行えることをまったく知らなかった。実際にはこれは case ではなく、Regexp の問題。

…が。これは Ruby 1.7 feature と書いてある1ので、1.6 を考慮する必要のある環境では使わない方がいいって判断して使ってないのかもしれない。あれー全然覚えてないな。

until, unless は使わないなぁ。ぱっと見て条件がどっちなのか分からないから。until はまだしも unless は譲れないと思う。「自然に読む」ことができない2し、not であることの意味が弱くなるから。同じ理由で後置するのもきらい。条件の存在が目立たなくなると目で追うときに混乱しやすい。

全体の構造的な部分は参考になるんだけど、細かい部分は「本人はすっきりしたかもしれないけど分かりにくくなっている」部分もあって3、採用するかどうかは現場判断て感じかなぁ。式の埋め込みは Ruby らしさの一つだけど、記号が増えていや。Perl じゃないんだから記号は増やしたくない。こういう考え方もまた Ruby らしさを実現するものではなかろうか。まぁ必ずしも埋め込むべきではないと断ってあるんだから、ネチネチとつつくようなポイントでもないんだけど。

いちばん気になったのは PukiWiki のパーサとしては実際には機能しない(かなり簡略化されている)のに PukiWikiParser というクラス名はどうなんだってところか。(読み始めた瞬間にものすごい期待が膨らんだのだ。)

いやぁ面白いな、これ。いろいろ書いたけど勉強になります。Ruby だけじゃなくて他の言語でもこういうのあったらいいかも。C や Java なんかだとすでに書籍であるのかな、というか C はそういう書籍を読んだことあったかも。

  1. 1.6 までは先頭の文字列にマッチすると 0 を返すという仕様なので、たぶん when に置いても期待通りには機能しないんじゃないかな。試してないけど。 

  2. 勉強不足と言われるかもしれないけど、通常の英語表現で unless を見かけた記憶がないんだもの。 

  3. slice はそんなことないんだけど 

More