Ruby で nil.to_i は 0 を返す

スポンサーリンク

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

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

例えば、以下のような配列があったとして、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は入門を超える内容で難しめです。
 
スポンサーリンク

Leave Your Message!