最近見たコードの中で、「わかりづらいなー」と思ったことがあったのでメモとして残しておきます。
タイトルの通り、Hash.include?
とArray.include?
は紛らわしいというお話です。
こんな感じのコードがあったとします。
#..(前略)... foo = { key_a: 'Hello', key_b: 'World' } bar = ['Hello', 'World'] puts foo.include?(foo_param) # -> ??? puts bar.include?(bar_param) # -> ???
説明用に書いたソースなので、何したいか意味不明な感じですが……
Rubyの文法に明るくない自分はここだけ読んで、
「あー、xxx_param って文字列がvalueに含まれているか確認したいんだな」
と思ったわけです。
ですが、Hash.include?
は実は、引数指定したkey
があるかの真偽を返すメソッドです。
ですので、仮に以下のようなfoo_param
、bar_param
になっていた場合、
foo_param = 'Hello' bar_param = 'Hello' foo = { key_a: 'Hello', key_b: 'World' } bar = ['Hello', 'World'] #........... #...(中略)... #........... puts foo.include?(foo_param) # -> ??? puts bar.include?(bar_param) # -> ???
putsの結果はこうなります。
false true
何が言いたいかというと、
「Hash.include?
ではなく、Hash.has_key?
を使って欲しかった。」
「foo
、bar
とか、型推測しづらい命名は避けて欲しかった。」
です。
でも、元はと言えば、Rubyの文法知識が乏しい自分が悪いか……。
がんばろ。精進しよ。