カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
どちらかというと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 が有効かどうかを条件とする際に、
といった使い分けを必要とするのではないでしょうか。
大変そうだけど、慣れれば自然と回避できるようになるのかな。
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).
> 大変そうだけど、慣れれば自然と回避できるようになるのかな。<br>2年間ほどperlを使い続けていますが、いまだに慣れません。<br>いまだに、これを理由に潜在的なバグを含んだプログラムを作っている気がします。<br>perlの神様たちはどうしているんでしょうね。
米人が多少のデザイン崩れを気にも留めないように、重篤なバグの原因にならなければ気にしないのかもしれませんね。