みなさんこんにちは!バックエンドが嫌になるとすぐにフロントエンドに逃げようとする 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.all
と 0n
については知りませんでした…こちらについては次回に譲りたいと思います!)
一方の 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 の違いについて他にももっと知ってるぞというそこのあなた! 是非以下のリンクよりご応募よろしくお願いいたします!