Ruby と JavaScript の falsy な値についてまとめてみた

みなさんこんにちは!バックエンドが嫌になるとすぐにフロントエンドに逃げようとする hikaru-kimi です!

私はバックエンド・フロントエンド双方を業務で日常的に実装しているのですが、バックエンドとフロントエンドとで文法や記法がごちゃまぜになってしまい、実行時にうまく動作しないことがしばしばあります。

(フルスタックエンジニアあるあるかと思います!)

今回は、弊社サービス Re:lation で使われている Ruby と JavaScript とで、truthy/falsy が異なる値をまとめて早見表にしてみました。

JavaScript における falsy な値は以下の通りですね。

""
0(-0)
0n
false
NaN
null
undefined
Document.all

出典: https://developer.mozilla.org/ja/docs/Glossary/Falsy

JavaScript プログラマなら即答したいところですね!

(ちなみに私は Document.all0n については知りませんでした…こちらについては次回に譲りたいと思います!)

一方の Ruby におけるそれは以下の通りです。

false
nil

出典: class FalseClass (Ruby 2.7.0 リファレンスマニュアル), class NilClass (Ruby 2.7.0 リファレンスマニュアル)

上記を踏まえて結果を異にするものをまとめてみますと、

Ruby JavaScript
0 truthy falsy
"" truthy falsy

になりますね。

0 なんかはよく条件判定で用いられるにも関わらず、Ruby と JavaScript とで異なるため取り扱いには注意が必要ですね。

私自身は、0 を判定する際は 0 が falsy であることを利用して評価するのではなく、明示的に 0 と扱う形で評価式を記述するよう努めています。

JavaScript でいうと、

if (!num) { // do }

と書くのではなく、

if (num === 0) { // do }

と記述するイメージです!

普段から Ruby と JavaScript とで扱いが異なる値について明示的に扱っていれば、truthy ( or falsy)を誤って扱わずに済みそうです。

弊社インゲージでは、言語仕様について深く探求する姿勢を持つエンジニアを募集しております。

Ruby と JavaScript の違いについて他にももっと知ってるぞというそこのあなた! 是非以下のリンクよりご応募よろしくお願いいたします!