Ruby で nil.to_i は 0 を返す

nil.to_i が 0 になるのは、個人的には数少ない Ruby の使いにくい点だと思う。なんでかというと nil は false なのだけど、nil.to_i は 0(数値)に変換されて true と評価されるので。

スポンサーリンク

例えば、以下のような配列があったとして、to_i してから真偽判定すると…

nil.to_i で nil が 0 に変換されるので、true(真)と評価され 0 is true が出力されます。本来の配列 a の要素の nil として false と評価されて欲しかった場合、期待と違う動作となってしまう。

Ruby は PHP や Perl と違って、数値の 0 は真になります。というか、Ruby では nil と false のみが偽でそれ以外は全て真となります。この nil.to_i が 0 になることによる真偽判定のミスは、うっかりやってしまうケースがありそうなので注意しようと思います。以前にもこれが原因ではまったことがあったので。

nil.to_i は nil を返すか例外を返しくれたほうが使いやすいと思うのですけれどね。ちなみに、false.to_i は NoMethodError の例外を返します。

スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!