LoginSignup
3
3

More than 5 years have passed since last update.

PHPerがつまづいたRubyの仕様(その2)

Posted at

あるあるな判定処理を書こうとしてハマってしまった...

irb(main):001:0> a = true
=> true
irb(main):002:0> p "foo" if a
"foo"
=> "foo"
irb(main):003:0> a = false
=> false
irb(main):004:0> p "foo" if a
=> nil

うん、ここまでは当たり前。パーフェクト。

で、ハマったのは次のやつ

irb(main):005:0> a = 1
=> 1
irb(main):006:0> p "foo" if a
"foo"
=> "foo"
irb(main):007:0> a = 0
=> 0
irb(main):008:0> p "foo" if a
"foo"
=> "foo"
irb(main):009:0>

・・・え?0でもifでtrueになるの?

PHPと比べてみる

php > $a = 1;
php > if ($a) { echo "foo"; }
foo
php > $a = 0;
php > if ($a) { echo "foo"; }
php >

うん、PHPだと 0false と同じような扱い。
だけど、Rubyだと 00 であって false ではないので、判定式にそのまま埋め込んじゃダメ。

・・・LLなのに妙なところで型に厳しいな...。

3
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3