例えばWebアプリでリクエストパラメータから受けた"page"を数値として使用するときとか。
Perlの場合、
my $p = $req->param('page');
my $page = int($p) || 1;
とかで、変換不可能な文字や"0"を受け取った場合はint()
の結果が0
となり、それは偽と判定され結果として$page
に1が代入される
が、Rubyで
p = params[:page]
page = p.to_i || 1
のようにしても、to_i
の結果が0
となった際に偽ではなく真と判定されるため1
にならない。(Rubyではfalse
またはnil
のみが偽になる)
簡単に記述する方法としては、.nonzero?
を使うという手段があるらしい。
p = params[:page]
page = p.to_i.nonzero? || 1
Numeric.nonzero?
はゼロのときにnil
を返し、そうでない場合は自身を返すそうです。?
がつくのに返り値がbooleanじゃないのは不気味?な気もしますが、こういうケースで使えるので便利ですね…