はてなグラフで体重を記録しています。それまでは気が向いたときにしか測ってませんでしたが、記録に残そうとしてからはほぼ毎日測るようになりました。
実は 2 月からつけていたのに操作を誤って全消ししてしまったという……あの UI にはなかなか慣れないですね。
56kg 前後が目標ですが、今のところ 2 月から 54kg 台を行ったり来たりな調子です。運動でもすれば増えるんでしょうかね。
babie さんが話題にしてたのでちょっと考えてみました。
自分の考える動的型言語の一番の問題点は、
log_puts(out, msg)
ここのoutに何を入れられるのか、何を入れたらいいのか簡単に調べる方法がないという点です。
この「問題点」で困ったことがないです。ライブラリ/クラス/メソッドの使い方に迷うのは、オブジェクト同士の協調関係が把握できないためであって、メソッドのシグネチャのせいではないですね。例えば、net/http の使い方には良く迷いますが、Net::HTTP のメソッド呼び出しを書くのには困らないというか。
例えばシグネチャが log_puts(LogOutputStream out, String message) だったとして、LogOutputStream が知らないクラスだとしたら、out を log_puts に渡せる状態にするにはどうすればいいかは結局調べないといけませんし、そのコストは「何を入れられるのか、何を入れたらいいのか」という型を知るだけのコストよりも高いと思います。
更に言えば、log_puts(out, msg) を見て、out なら少なくとも IO (Ruby の標準クラス)が渡せるだろうと推測でき、またそれが裏切られることがあまりないならば、ますます型情報はメソッドを使うときのヒントとしては必要ありません。
この仮定を裏返して考えると、ユーザの推測を裏切らないためには、できるだけ推測し易いオブジェクトを受け入れるようにメソッドを書くことになります(実際にそうかどうか定量的に調べると面白いかもしれませんね)。
「できるだけ推測し易いオブジェクト」などといっても、必要だから IO ではなく LogOutputStream にしているんだと言われそうですね。ただ、動的型言語は基本データ型の標準クラス(Ruby だと String/Array/Hash など)が強力ですので、クラスの対象ドメインに特化したクラスをあまり作らない傾向があると思います。HTML の属性を表すのに HTML::Attribute クラスを定義せず、Hash でいいやとか。
どちらかというと0が偽として見なされる方が見落としてバグになる可能性が高い気がする。plumの罠の話とか。
これは思いますね。Perl などで条件式に変数を入力があるかないかの意味で書くとたまにはまります。
Perl と Ruby と真偽の扱いが異なる点は、空文字列を偽とする、0 (と "0"。Perl は区別しないけど)を偽とするところです(他あったかな)。
Ruby では値が入力されているかを確かめるために、
if input and not input.empty?
p input
end
と書いたりします。input が nil でなく(=存在している)、かつ空ではない(=入力されている)という意味です。empty? メソッドは Array、Hash、String といった基本的なデータ型クラスのオブジェクトが持っています。特に入力には String が使われることが多いので、上のようなイディオムが良く使われます。rails では Object#blank? として定義されていますね。ここでは Perl と同じく空文字列 "" を偽として扱っています。
一方 0 が 偽だと困ることがあります。0 が意味のある値として与えられるときです。例えば、
具体例にすれば、0 円の購入物を家計簿につける、ZnZ さんが挙げられている plumの罠、項目の表示順番を 0, 1, 2 ... とするプログラムなどが言えるかと思います。
つまり、0 が偽な言語では、値 hoge が有効かどうかを条件とする際に、
といった使い分けを必要とするのではないでしょうか。
大変そうだけど、慣れれば自然と回避できるようになるのかな。
O'Reilly Ruby ブログより。Ruby プログラマを面接するときに訊いておくべきこと。「"J2EE" or "EJB" という単語が履歴書に何度も出てくるなら、Java は知らないと解釈せよ」(そして Ruby でも同じようなことがいえるだろう)などなど。実際的かどうかはわかりませんが、話としては面白い。
ヽ( ・∀・)ノくまくまー(2006-03-09) Symbol#to_procより例を拝借。
まず、前提。Symbol#to_proc の導入により、
array = [1,2,3]
array.collect{|i| i.to_s}
から、ブロック変数 i を除去することができて
array = [1,2,3]
array.collect(&:to_s)
とより簡潔に書けます。
簡潔なのは歓迎ですが、to_s する主体(オブジェクト i)がコード上からいなくなるのに違和感を覚えます。加えて、慣れ親しんだ collect が別物になってしまった感もあります。array.collect( :proc => &:to_s ) ならまだいいかなあ。
まあ、前者についてはprivate メソッドに一々 self をつけたりはしない(あ、そもそもできない。self. つけられるのはなんだったかな……)ので、慣れの問題なのかもしれません。
rubycoさんの日記は、プログラミング言語のTipsまとめサイトとして素晴しく機能しているわけだが、これは"結城さんがやっている"ということに依るところが多きい気がする。もし、"結城さんがやっている"ということが、各rubyユーザーに与える精神的な影響を抽出して仮想的な人格を構成できたら、プログラミング言語のTipsまとめサイトを半自動で生成することができないだろうか。
難しいのはベースとなる TIPS を書く人は文責を持たなければならないことかなと思います。つまり、
雰囲気があると、私のような間違いを恐れる人間には参加が難しいです。TIPS として適切な内容か、もっと良いコードはないか、言い回しは適切かなど、その後洗練をしていけばいいことを、最初から思い悩むこと必至です。質問側になら回れるのですけどね。その点、最低限タイトルとタグとコードがあればいいcode snippetsだと気軽かな。(という思考で私は オブジェクト指向スクリプト言語 Ruby リファレンスマニュアルに対峙してしまうわけですが、他の方がこれに書き加えたい/修正したい項目を見つけたときに、どう考えてどう行動するかを知りたいものです。)
最近のコメント:1.tnoma(2006-04-12 00:33) 2.hwc(2006-04-11 22:01) 3.babie(2006-04-09 18:15)
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).
Before...
_ だて [ありがとうございます。 国益のために女児を作って Ruby ハッカーに育て上げます(笑]
_ babie [おめでとうございます。うちの女児を Ruby ハッカーにする件はすっかり失念しておりました。非国民です。]
_ hwc [お久しぶりです。お元気ですか? おめでとうございます!]
_ tnoma [おめでとうございます。そんな計画が密かに進行していたなんて、、、Rubyハッカーですか。Perlもできたらバイリンガ..]