2008年10月31日金曜日

Rubyがなぜ読みやすい?

# はコメントなのか?違うのか? わかりずらい。

読みやすいって言う基準は何?
結局正規表現とかシェルのパイプで繋ぎまくったスクリプトが読みやすい、つまり書き方が分かっていれば簡潔、っていう読みやすさだと思う。だって全然読めないじゃん。パラメータ受けてないのに、書いてないときは呼び元で指定?? じゃ何が来るか分かんないじゃん。でもコレとかアレが来る前提で書くわけでしょ? 故に読みやすいと。いや〜絶対くじけると思う。そもそも出来るだけ冗長に書こうとする人間には無理。

例えば、
a[1] ||= 1
a[1]がnilでなければ1が代入される。理屈はそうなんでしょうね。でもこれを見て、直感的にそうだと分かる人がどれだけいるんだろう。簡潔と短いは同じじゃないはず。知ってる人にしか分からない。それは言語ですからね。でも同じ言語の中で、一つの文法にそってない。

によると、まず文法として、

式1 op= 式2

という形、つまりa[1] += 1、a[1] |= 1、a[1] ||= 1などがある。
ところが、opが、&&、||の場合とそれ以外の場合は意味が異なる。
opが、&&、||以外の場合は、

式1 = 式1 op 式2

&&、||の場合は、

式1 op ( 式1 = 式2 )となる。

つまり、||の場合は式1から評価するため、式1がtrueだと(式1 = 式2 )は評価されないことによるわけだ。しかし計算上、式1がtrueなら(式1 = 式2 )は評価されないということを意識するというのは、読みやすいということになるのだろうか。

a || b

と書いたとき、次の2つの文を比べてみよう。

(1)『aかbの「どっちかが」trueならtrue、それ以外はfalse』
(2)『まずaを先に判断して、aがtrueだったら、true、falseだったら次にbを判断して、trueだったらtrue、そうじゃなかったらfalse。』

どちらがより一般的な考え方なのか。それが読みやすさに繋がる意識の源ではないかと私は思う。というかそれが私。

私は「英語のように書ける」という説明を読んでこう思いました。私自身の英語力の問題はさておき、自然言語とコードが一致する、と。それは私向きに違いないと。何故かと言えば、私は例えば仕様書を日本語で書いたようなコードを書こうとするから。だから1行しかない関数が山のようにあったり、C言語なのに、値を返すだけの関数があったり。それはできるだけ思ったまま書きたいから。コンピュータのためのコード編集はその後やればいい。そうすればどうしたい(実際にした)けどペンティアムのためにこうしようという履歴が明確になって、意識とコードがずれない。

rubyには他にもProc.newのパラメータが呼び元で指定するとか、短く書きたいがためにハッシュの{}を省略するほうが美しいとか、とにかく意識とのギャップがそこここに散らばってる気がする。それが自分の意識の中で普通になれば、短い分読みやすくなる(速く読める)のかも。事実、Rubyの代表作であるRoRのプログラムが、その賞讃とは裏腹に読み難いという、何とも皮肉な評価を目にする。オブジェクト指向は外から使い安くする分、中身が苦労してるというのは最もな話。でもそれは読みやすさとは関係ない。RoRが読み難いならRubyで書いたプログラムは読み難いと思って、なぜ間違いなのだろうか。

evalはどうだろう? まだ簡単な例しか見てないけど、読みやすいのだろうか? HTMLやXMLを出力するのは良く分かるけど、同じ要領でclassを出力するのはねえ。何となくテーブルをオブジェクトにするには、それも有りなのかもしれない気はしてるけど。

余りにも遠い道のり。このままではダメだ。
ここは一つ、劇的な割り切りとすっ飛ばし!が必要だな。

ということで、10日でおぼえる本に戻ろう。
そして軽く一本書き上げよう。

俺だけが分からず屋で、Rubyが読み難かったり書き難かったりしても、いいかしら?byミシェルじゃない、いいんだよ。

iPhoneを使っていて、例えばTapTapRevengeで別なウェブサイトに移動したり(Safariに移行)、NIM EDITION のボタンから、App Storeに移動したりすると、もう元のTapTapRevengeには戻れない。マルチタスクじゃないからというのは確かにそうだけど、同じことはマルチタスクマルチウィンドウであるMacでの作業でも言える。このブログを書く前はRubyのチュートリアルを読んでいたわけだけど、ちょっと休憩ってことでiPhoneへ。そこで今言ったことを感じたので忘れないうちにメモしとこうとBloggerへ。だからうっかりすると、あれ、何やってたんだっけ?ということで、なかなか戻れなかったりする。ブラウザだけで作業してれば履歴で分かるけど、OS自体に操作履歴が残るわけじゃないので。

人間自身がマルチタスクで作業していることも良くあることで、NetBeansの最新版をダウンロードしてたり、インストールしてたりして「待ち時間」ができると他のタスクに移行する。原理的にはコンピュータ(OS)と同じ。もっともコンピュータの方が、もっと効率的に沢山のタスクをこなすわけですけどね。

そこで新しいUIにタスク指向というアプローチを取り入れてみたいと思います。アクティブなアプリケーションを監視するだけでも、そこそこのことは出来そうです。


JSR

私の7不思議の一つであるJSR。
JSR XXXという3桁のマジックナンバー。
JSRも分解したい。(イコール概念辞書に入れる)
JSRリアライザとかJSRインストーラとか。
今日のJSRを電車のLCDビジョンで英会話スクールの後に流すとか。

Sun Tech Daysの申し込み受付が始まったので、妄想が尽きない。

2008年10月30日木曜日

ビジネスプラン募集のメモ

ビジネスプラン募集か。メモしておこう。
ちなみにGrails Japanese サイトの広告をクリックしました。

2008年10月29日水曜日

lambda as Proc.new

どういうときに使い分けるのだろう? それとも分けないのか? 気まぐれなのか?



JOHNNIE WALKER Blue Label


約¥12,000で購入。注いだときにボトルの口から垂れてしまうのは、何とかならんものか。注ぐたびにティッシュで拭いているのだが、それってとてもおかしい。

フィッシング対策画面

URLをチェックしましたチェックボタンを付けてみようかと思う。
But, フィッシング側ではそんなことをしていないので、普段から利用しているサイトで、かつ、フィッシングチェックボタンが本物はあるということを分かってないと無理か。