読者です 読者をやめる 読者になる 読者になる

Hash#fetch と Hash#[] その2

こんなエントリを書きましたが、しかし Hash#[] にもよいところはあって、もちろんあるインデックスへのアクセスとしてわかりやすい表記であることもそうですが、「値が偽値であるかどうか」をチェックできるということがそれです。

goddess = {perl: "Larry Wall", ruby: "Matsumoto Matz Yukihiro", python: "Guido van Rossum"}
goddess[:php] = nil # I don't know the god of PHP :)
goddess.fetch(:php, "") # 空文字列かとおもった? 残念、さやかちゃんでした!
goddess[:php] # -> nil

つまり || 演算子で nil チェックができるわけですね。

しかし、そもそも nil チェック自体がダサいしバグの温床になるのでは、という考え方もあります。

存在しないキーでアクセスしようとしたら例外投げるのもありかもしれません。Hash#fetch は第二引数になにも渡さないと KeyError を投げるようになってます。よいですね。