2013年01月23日

共通部分でなくとも抽象化

読みやすいコードってどんなものか考えてみた -抽象化と名前重要- - 馬鹿と天才は紙一重読んでその2。その1はRubyの「範囲」は分かりづらいを。

"共通部分でなくとも抽象化"項の補足。

共通部分(コード中で繰り返し出てくる記述)でなくても抽象化すべき例として、件の記事ではneed_to_pay_postageメソッドを例として挙げている。

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

このコードでは"productモデルの中で、priceカラムの値が0から5までを取得している"という「処理」は分かっても、それが何を「意図」しているのかは読み取れない。だから以下のようにして「意図」が読み取れるようにしましょうと。

class Product < ActiveRecord::Base
  scope :need_to_pay_postage, lambda {
	where(:price => 0..5)
  }
end

「別にコメント書いとけば良くね?」とも言われそうだけれど、そうでも無いよなぁと。

仕様変更なんていくらでも起こりうる事で、今は「5ドル以下の物には一律送料がかかる」だったとしても、将来それが別の条件に変わる事も有り得るわけで。先日Amazonが仕様を変えたのは記憶に新しいところ。その仕様だって、最初からそうだった訳ではないのだしね。

このコードだって、将来、shim0muraさんが書いているような"書籍については10ドル以下の商品が、また衣類については30ドル以下の商品が送料がかかり、それら以外のカテゴリの商品で5ドル以下のものであれば送料がかかる"なんて複雑な仕様へ変更される可能性はいくらでも有る。その為にも抽象化はしておくべきなのだろうなと思う。変更が必要な部分を探すのも容易になるし、その影響が及ぶ範囲を必要最低限にする事も出来る訳だ。



ラベル:Technique
posted by 天井冴太 at 01:47| Comment(0) | TrackBack(0) | Other | 更新情報をチェックする

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 | 更新情報をチェックする

2013年01月07日

Gitでtypoしたコマンドの正しい綴りを推測、自動実行させる

Avner Cohen : Git - Autocorrect spelling

へー、知らなかった。というわけで紹介。


Gitコマンドを打つ時(いや、Gitに限らないが)、何らかのtypoを犯してしまう事は良くある。

例えば、

git pusj	# 本当はpush

勿論Gitに"pusj"なんてコマンドは無いので、本来ならばエラーとなる。

エラーを確認し、正しいコマンドを打ち直すのは何とも面倒だ。しかし、ユーザーが意図していたコマンドを推測し、それを実行するようにGitを設定する事が出来る。

その為にはhelp.autocorrectを使う。

git config --global help.autocorrect 1

help.autocorrectの引数は、補完対象のコマンドを実行するまでの待ち時間(0.1秒単位)である。上記の場合であれば0.1秒待つ事を意味する。

先の"pusj"の場合であれば、"push"のtypoである事が推測出来るので、Gitは以下の警告メッセージを出力後、指定の時間だけ待ってから"push"を実行する。

WARNING: You called a Git command named 'pusj', which does not exist.
Continuing under the assumption that you meant 'push'
in 0.1 seconds automatically...

(勿論"0.1 seconds"の部分は、実際にhelp.autocorrectに設定した値によって変動する。)

待ち時間が在るのは、ユーザーの意図と異なる推測が行われた時に、それを(例えばCTRL-Cで)キャンセル出来るようにする為だろう。

なお、値を0にすると候補の列挙のみ(つまりデフォルトの挙動)、負数にすると待ち時間無しに推測したコマンドを実行する。

因みに私は20、即ち2秒待機するように設定している。誤った推測をキャンセルする事を考えると、数秒のウェイトは必要ではないかと思う。

ラベル:tips vcs git
posted by 天井冴太 at 02:34| Comment(0) | TrackBack(0) | Tool | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。