17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

文字列から数値に変換し、0以外の値として得たいとき

Last updated at Posted at 2013-02-22

例えば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じゃないのは不気味?な気もしますが、こういうケースで使えるので便利ですね…

17
17
2

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
17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?