2009/10/09

hash.nil? or hash.empty?

ハッシュが nil または empty だったら、error を返す一行の書き方をすぐに思い出せなかった。
基本に立ち返るべくテスト。

  1 # coding: utf-8
  2 
  3 def aa(h)
  4   p h
  5   return puts "error\n" if h.nil? || h.empty?
  6   return puts "ok\n"
  7 end
  8 
  9 h = Hash.new
 10 aa(h)
 11 
 12 h = nil
 13 aa(h)
 14 
 15 h = {:a=>'a'}
 16 aa(h)


テストして気付いた。5行目のところをついつい
return puts "error\n" unless h.nil? || h.empty?
と、書いてしまってたことに。どおりで一瞬ぎょっとする結果になるわけだわ。

でもよくみていたら「あっ」と思った。
hash は、nil を返すのかempty を返すのかは、最初からはっきり決めておくべきなんであって

... if h.nil? || h.empty?

なんて書かなくてよいようにメソッドを作るべきなんだ。
つまり

return puts "error\n" unless h


return puts "error\n" if h.empty?


どちらかしかありえないようにすべきなんだろう、と。
empty の場合もあれば nil の場合もありうるなんてことは回避した方が安全でわかりいい。

...そういえば、以前にもこの結論に至ったことを思い出してしまった。がっくり。

0 件のコメント: