- 更新日: 2014年3月26日
- Ruby
Ruby で nil.to_i は 0 を返す
スポンサーリンク
nil.to_i が 0 になるのは、個人的には数少ない Ruby の使いにくい点だと思う。なんでかというと nil は false なのだけど、nil.to_i は 0(数値)に変換されて true と評価されるので。
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
例えば、以下のような配列があったとして、to_i してから真偽判定すると…
1 2 3 4 5 6 7 8 9 10 11 12 13 |
pry(main)> a = ["5", "2", nil, "8", nil] => ["5", "2", nil, "8", nil] pry(main)> a.each do |i| pry(main)* puts "#{i.to_i} is true" if i.to_i pry(main)* end 5 is true 2 is true 0 is true 8 is true 0 is true => ["5", "2", nil, "8", nil] |
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は入門を超える内容で難しめです。
>> 次の記事 : Rubyで連番の変数を動的に作成
<< 前の記事 : Ruby でハッシュの値が nil の場合のみ値を変更して新たなハッシュを返す
- Ruby の関連記事
- Gemの作り方(Ruby Gem)
- ローカル開発中のgemをGemfileに書いてインストール
- 熊本地震の余震が夜に多いのは本当か?Rubyプログラムで検証してみた
- El Capitanでgemのnative extensionビルド失敗に対応
- Rubyで親クラスから子クラスの定数を参照
- MacabをRubyで使う
- rbenv/ruby-buildでRuby最新バージョンをインストール
- Rubyでクラスインスタンス変数にインスタンスメソッドからアクセス
- 距離1kmあたりの緯度・経度の度数を計算(日本・北緯35度)
- Google Maps Geocoding APIで住所から緯度・経度を取得するRubyコード
Leave Your Message!