トップ «前の日記(2010-04-05) 最新 次の日記(2010-04-07)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2010-04-06

_ Rubyベストプラクティス

オライリーの高さんからRubyベストプラクティスを頂いたので、ぱらぱら読んだ。妙に読みやすいので、それでもほとんど読んだようなつもりになってしまえるのはなぜだろうか。

これは妙な本だな。

まず、これはRubyとは何か? を説明した本ではない。そういう本ならキリンの本がある。

初めてのRuby(Yugui)

次に、この本は、〜を書くにはどうすればいいんだ? ってときに紐解く本でもない。そういう本なら白地に青い本がある。おれが持ってるのは赤地の本だけど。

Rubyレシピブック 第2版 268の技(青木 峰郎/後藤 裕蔵/高橋 征義/まつもとゆきひろ)

そういうときには〜ライブラリを使えっていうような本でもない。

Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)(島田 浩二/設樂 洋爾/村田 賢太/前田 智樹/谷口 文威)

ある種の技術を解説するためにRubyを使った本でもない。

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~(原 悠)

リファクタリング:Rubyエディション(Jay Fields/Shane Harvie/Martin Fowler/Kent Beck/長尾 高弘)

高橋さんがあとがきを書いていて

中・上級者向けのRubyプログラミングに関する解説書である。

と定義している。

これってでも不思議だな。Cにはベストプラクティスなんてなくて、あるのは、記述すべきプログラムに対して最適な書き方だけだし、(ほとんどの)Javaにはベストプラクティスなんてなくて、あるのはどうでも良いコーディング標準だけだ。

しかし、Rubyには(高橋さんの後書きによればPerlにも)ベストプラクティスがある。

ベストプラクティスってのはなんだろう? イディオムのようだがイディオムではなさそうだ(たとえばRubyのイディオムならば、val ||= INIT_VALUEとかある)。もう少し考え方(設計方針というか)が含まれているように見える。かといってデザインパターンではない。もっと遥かに具体的だ。

Rubyベストプラクティス -プロフェッショナルによるコードとテクニック(Gregory Brown/高橋 征義/笹井 崇司)

まあ、でも帯を読むと角谷さんが正鵠を射た軽いフレーズを書いていて

Rubyっぽいコードの書きかたと考えかたが詰まってます。

と、っぽい書き方/考え方=ベストプラクティスとしているみたいだ。そんな感じだ。

しかも、こないだ中田さんのコードを見ておれが学んだことが、ちゃんと出ていたりして。

&blockとinstance_evalを組み合わせると、任意のオブジェクトのコンテキストでブロックを実行することができる。

—P.54

ちぇ、あの時、すでにこの本は届いてたんだよな。でも封は切ってなかったのだった。

というわけで、比較的最初のほうで、こういった実際に利用するし、しかしあっというまに迷路に入り込むような書き方の方法が説明されていたりするわけだ。

つまり、ベストプラクティスが必要な言語ってのがあって、それは、いろんな書き方ができるから、ではこういうこともできるはず、とやってみるとうまくいかなかったりして、しかし、確かにその「できるはず」は正しく、方法さえ知っていればできる、そういった言語、つまり柔らかくていくらでも伸びしろがあって、使いこなせばどうにでも自在にやれる言語の場合、その方法を知るには、処理系のソースを読むか、どこかからその自分がやりたいことをやっているソースを持ってきて読むか、そういった実際的な学習が必要な言語、なのだろう。で、Rubyはそういう言語なわけだ。(と一度、この日記をコミットしてから、実は「はじめに」を読んでいないことに気づいて読んでみたら、同じようなことが書いてあった)

で、少なくともおれがあの時知りたかったことは説明されている。つまり実用的な本なのは間違いない。

ところで、脚注におそらく高橋さんが付けたらしい #!/usr/bin/env rubyという書き方はお勧めしないというのが、説明抜きで出てくるけどなぜだろう? Linuxのenvだと-Kuとか付けるとエラーになるからかなぁ。

しかし、カニといえば、子供はカニ座なのだが、星座の物語がギリシア神話にあると知って、大喜びでカニ座の物語を読んで、あまりの唐突な出現と退場のふがいなさにショックを受けていた姿を思い出す。

本日のツッコミ(全5件) [ツッコミを入れる]
_ なかだ (2010-04-07 01:56)

二重に環境依存だからでは。オプションについてもそうだし、$PATHによって違うバージョンになってしまったり。

_ arton (2010-04-07 02:19)

うーん、環境依存を避けようとして逆に環境依存になるとは。

_ ne+ (2010-04-07 09:16)

http://ya.maya.st/d/200606c.html#s20060625_1<br><br>中途半端に動くより<br> 「そこにrubyインタプリタはありませんでした」<br>という明確で修正簡単なエラー出しまくるほうが安全でマシ、というのが結論かと思われます<br>いっそ「#!/path/to/ruby -Ku」とでも書いて事前編集必須にしたほうが<br>「実行ファイルは必ず目で確認する」という思想強制な感じで Ruby っぽい気もします

_ arton (2010-04-07 12:34)

おお、なるほど。そのリンク先は説得力がありますね。

_ なかだ (2010-04-07 15:35)

「目で確認」というのはバカバカしいので、setup.rb推奨


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え