RSpecのbe_falsey、じつはeがなくてbe_falsyでも良いということを知った話。
be_falseyが覚えづらい
RSpecのmatcherで、falseないしfalseとみなせる値(nilとか)の時OKになるbe_falseyというのがあります。
https://relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/be-matchers#be-falsey-matcher
このつづりがなんか覚えづらい。
JavaScriptでは、同様の概念が"Falsy"として出てきます。
https://developer.mozilla.org/ja/docs/Glossary/Falsy
falsy は falsey と書かれることもありますが、通常、英語においては単語を~yの形で形容詞化する際、末尾の e を省きます(noise → noisy, ice → icy, shine → shiny)
だよね? 普通e書かないよね? だから覚えづらかったんだ!
プログラマに寛容なRuby界でこういう主張が放置されていることは少なくて、何らかの形でカバーされているはず...
#be_falsey ⇒ Object (also: #be_falsy, #a_falsey_value, #a_falsy_value)
ほらね! ( https://www.rubydoc.info/github/rspec/rspec-expectations/RSpec/Matchers )
ということで、RSpecでは、be_falsyと書くこともできます。とはいえ公式ドキュメントがbe_falseyだから、be_falsey推しぽい...
追加情報
RSpec入門のQiita記事などで高名な @jnchito さんから情報を頂きました。
https://twitter.com/jnchito/status/1029135299295686656
もともと使えた
誰かが「be_falsyがいいよ」といったから使えるようになったわけではなく、be_falseyが使えるようになったときからすでにaliasが用意されていたみたいです。
In RSpec 3, we've renamed these to be_truthy and be_falsey (or be_falsy, if you prefer that spelling) to make their semantics more explicit and to reduce confusion with be true/be false
( Notable Changes in RSpec 3 http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/ )
公式はbe_falseyぽい
be_truthy/be_falseyが導入されたときのissueがこちら。
RSpecメインメンテナのMyronさんの発言。
I don't have a strong opinion on be_falsy vs be_falsey. falsey seems to be the more common term based on number of google results, though:
(私訳: be_falsyかbe_falseyについて強い意見はないよ。でもググった感じだとfalseyのほうが一般的な用語みたいだね )
ということで、どっちでも良かったけど、当時はfalseyのほうが一般的だからfalseyにしようぜ、ということだったみたいです。
上がっているスクリーンショットを見ると、当時はまだJS界でもfalsey派とfalsy派がいたのがのちにfalsy派に統一されて現代の状況が生まれてしまったみたいですね。どこかで統一されてくれると嬉しいなあ。