2013年01月21日

Rubyの「範囲」は分かりづらい

読みやすいコードってどんなものか考えてみた -抽象化と名前重要- - 馬鹿と天才は紙一重

自分は果たして読みやすいコードを書けているのか、やや恐ろしく感じながら読んだ。

で、気づいた事その1。その2は後日その2はこちら。共通部分でなくとも抽象化

件の記事に以下のようなコードが在る。

Product.where(:price => 0..5)

このコードの0..5の部分、これは「0から5まで」という「範囲」を表すRubyの記法で、これの意味は"productモデルの中で、priceカラムの値が0から5までを取得"という事になる。

なるんだけれど、最初、以下のように誤読してしまい、その後の文の意味が一瞬解らなかった。

Product.where(:price => 0.5)

ドット(.を1つ見落としてしまった。これだと「priceカラムの値が0.5の物を取得」という事になってしまう。

"."なんて見た目ただの「点」なので認識しにくい事、認識しにくいこと。

ではどうすれば良いんだろう? ……括弧で囲ってみてはどうか。

Product.where(:price => (0..5))

単純な実数を括弧で囲う奴なんて先ず居ないだろうし。実数だとしたら不要な記述とする事で読み手の注意を引きつけようという魂胆。

或いは、空白で区切るのは?

Product.where(:price => 0 .. 5)

これがもし実数ならば、小数点の前後に空白を差し挟む事は出来ない(そもそもしない)ので、読み間違える事はないだろう。更にこの場合、仮にコーディング時にドットを1つ書き漏らしてしまっても、Syntax Errorになるので、直ぐに気づく事が出来そうだ。

……うーん、個人的には前者の方が好みかなぁ。メリットが多いのは後者だろうけど。

ラベル:ruby
posted by 天井冴太 at 02:10| Comment(2) | TrackBack(1) | Study | 更新情報をチェックする
この記事へのコメント
Rubyの範囲と言えば、0..5と0...5の違い(5を含むか否か)も分かりづらいなあと思っています。どっちがどっちだか、いつもリファレンスを見て確かめています。
Posted by Egtra at 2013年01月29日 00:44
Egtraさんコメント有り難う御座います。
うおお、"..."なんて演算子も在ったのか……知らなかった。
しかしこれは確かに分かりづらい。これはコメント以外に注意を促す方法が思いつかないですね……
Posted by 天井冴太 at 2013年01月29日 01:15
コメントを書く
コチラをクリックしてください

この記事へのトラックバック

共通部分でなくとも抽象化
Excerpt: 読みやすいコードってどんなものか考えてみた -抽象化と名前重要- - 馬鹿と天才は紙一重読んでその2。その1はRubyの「範囲」は分かりづらいを。 "共通部分でなくとも抽象化&am..
Weblog: AMAgrammar <> PROgrammer
Tracked: 2013-01-23 01:47